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的使用。

相關文章
相關標籤/搜索