文章詳情頁
mysql - 為什么limit前面加上order by 索引查詢性能會更好?
瀏覽:106日期:2022-06-13 18:26:44
問題描述
問題解答
回答1:找了個2千5百萬數據的表進行測試,id是自增主鍵。
用下面語句進行測試,關query cache,每個連續跑10遍,計算平均耗時:
SELECT * FROM user_orders limit 100000,10;71.3msSELECT * FROM user_orders order by id desc limit 100000,10;83.4 msSELECT * FROM user_orders order by id asc limit 100000,10;69.3msSELECT * FROM user_orders limit 200000,10;133.2msSELECT * FROM user_orders order by id desc limit 200000,10;178.4 msSELECT * FROM user_orders order by id asc limit 200000,10;133.4msSELECT * FROM user_orders limit 10000000,10;6429.5msSELECT * FROM user_orders order by id desc limit 10000000,10;8270.9 msSELECT * FROM user_orders order by id asc limit 10000000,10;6918.7mslimit offset小的時候,加order by走索引只掃少量行更快,而offset較大時,加order by會更慢,全表掃描反而會快。
回答2:如果不加索引,SELECT * FROM sys_client LIMIT 100000,10會將全表掃描,然后取第100001~100010這10條記錄; 加了索引之后,就只檢索100010條記錄,而不是全表檢索,所以執行效率會更好!
回答3:在第一條沒有 order by 語句中,mysql 處理步驟是這樣的:
根據語句取出 10 條數據;
對這十條數據進行排序;
返回這 10 條數據;
但是在第二條語句中,假設你的 id 字段為主鍵索引,mysql 處理步驟是這樣的:
取出 10 條數據;
利用索引順序直接取得已經排好序的數據;
返回這 10 條數據;
總結一下:如果 order by 的字段在在執行中利用了索引。則可以利用索引順序而直接取得已經排好序的數據。如果不是,才進行排序操作。
回答4:你的id有加索引吧
回答5:0.0001…… 你需要驗證復雜一點的sql
上一條:mysql分組查詢問題。面試被問到下一條:mysql事務日志的一些問題
相關文章:
1. HTML5禁止img預覽該怎么解決?2. javascript - vue+iview upload傳參失敗 跨域問題后臺已經解決 仍然報403,這是怎么回事???3. python - django 按日歸檔統計訂單求解4. objective-c - 從朋友圈跳到我的APP 如何實現?5. 百度地圖api - Android 百度地圖 集成了定位,導航 相互的jar包有沖突?6. 網頁爬蟲 - python爬蟲用BeautifulSoup爬取<s>元素并寫入字典,但某些div下沒有這一元素,導致自動寫入下一條,如何解決?7. javascript - vscode alt+shift+f 格式化js代碼,通不過eslint的代碼風格檢查怎么辦。。。8. 請教一個python字符串處理的問題?9. sql語句 - mysql中關聯表查詢問題10. 怎么可以實現在手機瀏覽器看到鏈接的title屬性,就是鼠標放上去會有一個tip效果的
排行榜
