MySQL一些中重要命令

前言:

  最近在面试的过程当中,深感对MySQL一些重要命令的缺失。借着这个机会,补补这块的知识。不让本身只会增删查改,懂一些高级的东西面试

  • limit 用法
  • order by 用法
  • in 和 between的用法
  • join的用法

 

(一)limit用法

咱们看下面的代码:优化

 1 select id, name from table limit 5, 10spa

一个简单的limit命令,limit m, n 表明从m+1个开始取n行数据,输出code

上面也就是从第六行开始,输出10行。也就是输出6-15行blog

假设咱们有以下表:索引

数据大概为100W条数据。it

 

执行以下命令:table

1 select * from BookIndex limit 10, 10;

 

用了0s,而且没有用索引。ast

在执行以下命令:class

1 select * from BookIndex limit 1000000, 10;

一样十条数据,却用了0.31秒。一样是全盘扫描。

下面我用索引优化:

用了0.17秒。 0.31/0.17  大概快了两倍左右吧。

下面再次优化:

0.00s,能够说快的不知一点两点的。

记得用limit必定要用索引,而且若是m(偏移量)过大,先用where筛选一波数据出来在处理。

 

(二)order by用法

oder by 非常简单,并且是默认用了range索引。

默认升序,能够加上desc变为降序。

 

(三)in 和 between的用法

咱们能够从explain看出,无论是in仍是between都是用了索引。

并且between有一个强大的功能,和limit进行比较的时候。当偏移量较大,但取的数据量较小的时候,用between最为合适

看一下的实验

 

直接0.00s搞定,一点都不含糊。

 

(四)join的用法

  • JOIN: 若是表中有至少一个匹配,则返回行
  • LEFT JOIN: 即便右表中没有匹配,也从左表返回全部的行
  • RIGHT JOIN: 即便左表中没有匹配,也从右表返回全部的行
  • FULL JOIN: 只要其中一个表中存在匹配,就返回行

"Persons" 表:

Id_P LastName FirstName Address City
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_O OrderNo Id_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

 

inner join:

 

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

left join:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

注意到没有最后一行OrderNo为空

right join:

LastName FirstName OrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

 

后言:

写完后,发觉好累,真的好累。写了两个多小时了,求爸爸让我上热门。

不过对MySQL的一些理解也更加深入了,尤为是limit的使用。

相关文章
相关标签/搜索