当前位置: 移动技术网 > IT编程>数据库>Mysql > MySQL一些中重要命令

MySQL一些中重要命令

2018年04月10日  | 移动技术网IT编程  | 我要评论

前言:

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

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

 

(一)limit用法

我们看下面的代码:

 1 select id, name from table limit 5, 10

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

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

假设我们有如下表:

数据大概为100W条数据。

 

执行如下命令:

1 select * from BookIndex limit 10, 10;

 

用了0s,并且没有用索引。

在执行如下命令:

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_PLastNameFirstNameAddressCity
1 Adams John Oxford Street London
2 Bush George Fifth Avenue New York
3 Carter Thomas Changan Street Beijing

"Orders" 表:

Id_OOrderNoId_P
1 77895 3
2 44678 3
3 22456 1
4 24562 1
5 34764 65

 

inner join:

 

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678

left join:

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
Bush George  

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

right join:

LastNameFirstNameOrderNo
Adams John 22456
Adams John 24562
Carter Thomas 77895
Carter Thomas 44678
    34764

 

后言:

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

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

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网