MySQL資料庫order by 奇慢無比

2022-07-05 12:18:13 字數 979 閱讀 8623

今天遇到個奇葩的問題,

sql 資料量很大 有where 和order by,不加order by 速度很快,加了就很慢

這條語句應用的索引是idx_bo_order_book_local

進一步確定,再對使用where條件後,索引變成了主鍵。

mysql預設的查詢(沒有where條件),不一定使用主鍵,由於mysql的每一條簡單查詢只應用乙個索引,所以,這個時候使用order by 主鍵,主鍵的索引功能失效。

1、order by 索引(where條件中引用的索引)。

2、強制使用主鍵:force index(pri),如果想強制使用索引,則用force index(索引名)。

explain select t.order_id from book_order t force index(idx_bo_order_book_local) order by t.order_id desc;
1、mysql每天一條簡單語句只應用乙個索引,所以order by的字段要在索引之中,並且和where條件可以合併成組合索引。

2、select的字段,必須是索引字段。(主鍵查詢除外)

3、如果sql語句為復合語句,包含子查詢等,可以把語句分解成簡單查詢來分析。

MySQL資料庫索引orderby排序精講

目錄 排序這個詞,我的第一感覺是幾乎所有app都有排序的地方,商品有按照購買時間的排序 b站的評論有按照熱度排序的.對於mysql,一說到排序,你第一時間想到的是什麼?關鍵字order by?order by的字段最好有索引?葉子結點已經是順序的?還是說盡量不要在mysql內部排序?現在假設有一張使...

資料庫學習 order by(結果排序)

查詢結果排序問題 dbms可以對查詢結果進行排序,可以公升序排列,也可以降序排列 select語句中結果排序是通過增加 order by 子句來實現的 語法形式 order by 列名 asc desc 加上子句後可使查詢結果按照指定的順序進行排列,若後面跟asc或者省略,則進行公升序排列 若跟 d...

《資料庫SQL實戰》不使用order by

此題來自於nowcoder,要求不使用order by 取排名第二多的資料。題目 查詢當前薪水 to date 9999 01 01 排名第二多的員工編號emp no 薪水salary last name以及first name,不准使用order by create tableemployees ...