Mysql利用索引進行order by排序優化

2021-10-18 02:53:58 字數 1070 閱讀 3562

在mysql資料庫中,我們一般都會設計乙個id作為一張表的主鍵,mysql也會預設為我們的id主鍵建立索引,在innnodb中我們稱之為聚合索引。總之,mysql為id主鍵建立索引這件事情我們是清楚的。

一般管理系統中,我們查詢資料的時候,會根據業務需要對資料進行排序,於是需要我們sql語句中用到order by。我們來看一下下面這個sql語句,其中event_time設定了索引,id為主鍵。

select

*from dac_log where event_time >

"2020-12-29"

and event_time <

"2020-12-30"

order

by id desc

;

乍一看,這個sql沒什麼問題,查詢條件使用了索引,id也是索引,於是就得出都會走索引的錯誤判斷。

下面我們來分析一下上面sql語句的問題在哪。

select

*from dac_log where event_time >=

"2021-01-25"

and event_time <=

"2021-01-26"

order

by id asc

limit50;

//耗時7.8秒

select

*from dac_log where event_time >=

"2021-01-25"

and event_time <=

"2021-01-26"

order

by event_time asc

limit50;

//耗時0.038秒

可見order by 後面的字段對sql查詢效能影響極大。

對於order by + id和event_time的相同點和不同點有:

也就是說,order by id的sql語句沒有使用索引進行排序,導致查詢出來的sql,還需要在儲存引擎層更具欄位id的值進行排序,導致效能地下。

PG中使用索引進行模糊查詢

現在資料庫中存在乙個tb user id,name,age 表,並且已經針對name字段建立了索引tb user name idx。正常情況下,執行如下sql語句 explain analyze select from tb user where name like aaa 發現該sql語句在nam...

利用Federated引擎進行mysql複製

federated儲存引擎可以使幾台資料庫邏輯上組成乙個資料庫,其作用相當於oracle的資料庫鏈結,通俗地說,即在本地建立遠端的資料庫表的引用。mysql需要5.0以上 1 檢視是否安裝了federated引擎 show engines 從中可以看出federated引擎沒有開啟 windows下...

如何利用NumPy進行索引和切片

處理多維陣列,如何利用numpy進行索引和切片?今天番茄加速就來跟大家講解下。平時遇到關於numpy的bug,解決不了的,可以先去檢視api的使用說明。理解numpy的向量化能力,這正是賦予它簡潔的重要原因之一。使用python原生api會經常寫些for,但是numpy讓它變得不再需要,numpy一...