Mysql的order by 執行原理


說明:

1. mysql使不使用索引與所查列無關,只與索引本身,where條件,order by 字段,group by 字段有關。

2. 索引的作用一個是查找,一個是排序。

order by語句使用索引最左前列,使用where子句與order by子句條件列組合滿足索引最左前列。

CREATE TABLE user (
  id int(11) NOT NULL,
  city varchar(16) NOT NULL,
  name varchar(16) NOT NULL,
  age int(11) NOT NULL,
  PRIMARY KEY (id),
  KEY city (city)
) ENGINE=InnoDB;

 

 

 

 

 

 

 

 

 

如果能夠保證從city這個索引上取出來的行,天然就是按照 name 遞增排序的話,是不是就可以不用再排序了呢?
因此想到了聯合索引,創建(city,name)聯合索引,sql 語句如下:

alter table user add index city_user(city, name);

 

 

 

 

select city,name,age from user where city='蘇州' order by name limit 1000;

 

 

還能不能優化呢,朋友們還記得覆蓋索引嗎?覆蓋索引的好處就是能夠避免再次回表查詢。
我們創建(city,name,age)聯合索引,這樣在執行上面的查詢語句就能使用覆蓋索引了,避免了回表查詢了,sql 語句如下:
alter table user add index city_user_age(city, name, age);

 

 

當然,覆蓋索引能夠提升效率,但是維護索引也是需要代價的,因此還需要權衡使用。

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM