索引优化策略(中)
我們已經知道了,MYSQL中最常見的兩種索引類型的,主要特點,也知道了不同索引的優化策略,下面我們就來看看,如何使用索引來優化我們的查詢了,關于如何優化查詢,我們在下面的查詢優化章節呢,還有更為詳細的討論,這里只舉幾個常用的索引的優化查詢的方法,前面說過了B樹索引,是按照鍵值的順序來存儲的,不但可以利用B樹索引來查找我們所需要的數據,同時還可以利用B樹索引,來做排序,下面我們就先來看看,如何來利用B樹索引呢,來優化排序操作,MYSQL有兩種方式可以生成這種有序的結果,第一種是通過排序操作,另一種是按照索引順序來掃描數據,如果explain所執行的計劃中所顯示的,type列為index,說明MYSQL利用了索引掃描來做排序,使用索引掃描來做排序的時候呢,由于從只需要一條索引記錄,移動到了下一條索引記錄,所以通常來說是很快的,但是如果想用索引掃描的方式,來優化查詢呢,實際上并不太容易,我們先來看看使用索引來優化排序,所需要的條件,大家就知道了
首先想要利用索引來進行排序,首先索引列的順序一定要先要和order by字句的順序要完全一致,而且索引中所有列的方向,不管是升序還是降序,和order by中子字句對應的方向也要完全一致,最后在多個表的關聯查詢中,order by中的字段呢,要全部在關聯表中的第一張表中,那這些條件是不是很苛刻呢,我們下面在事件中呢,去看一看什么樣的查詢是可以使用到索引來進行排序的
我們先來看一下這個表的表結構show create table rental
這張表一共有這么幾個列,同時存在rental_id,rental_date這樣的索引,那么我們來看看,可以使用索引排序的第一種情況呢,由于rental是一個innodb存儲引擎的表,而對于innodb存儲引擎的表來說呢,數據的這種邏輯呢,和組件順序是一致的,所以我們可以使用主鍵來進行排序,如下面的這個排序所示,我們使用order by,rental_id也就是主鍵來進行排序explain select * from rental where rental_date > '2005-01-01' order by rental_id;
大家可以看到
就是用索引來進行排序的,如果是對于其他存儲引擎的表會怎樣呢show create table retal_myisam表
retal_myisam表和rental表是一樣的,并且在rental_date上也是有相同索引的,如果我們在rental_myisam表上執行查詢呢,又會有什么樣的查詢計劃呢,我們來看一下explain select * from rental_myisam where rental_date>'2005-01-01' order by rental_id\G
?
超強干貨來襲 云風專訪:近40年碼齡,通宵達旦的技術人生總結
- 上一篇: 索引优化策略(上)
- 下一篇: 特定SQL的查询优化