場景:如今有一管理端後臺系統,須要查看第8700頁用戶列表(假設存在這一頁)信息。原來程序員寫的sql以下
SELECT scu.* FROM st_community_user scu ORDER BY scu.create_time DESC LIMIT 870000,100
這裏附上總用戶數
原來程序員寫的sql查詢時長
根據上圖能夠看出,查詢時長爲4.5s多,反應在頁面上就是用戶須要等待5s到6s才能打開這個頁面,很明顯是不能容忍的。程序員
這裏稍加修改下sql,以下
SELECT scu.user_id FROM st_community_user scu ORDER BY scu.create_time DESC LIMIT 870000,100
查詢時長以下
如上圖,很明顯,查詢時長降下來了。
原理分析:sql查詢時,若是用到的索引語句中只包含了索引列(覆蓋索引),那麼這種狀況下查詢很快。如上的樣例中,查詢結果原本是scu.*,改爲scu.user_id,且user_id是主鍵,惟一索引。查詢索引列(user_id)速度就會很快!
可是上述語句查詢出的是用戶id列表,而不是用戶信息列表,完善sql以下
SELECT scu_a.* FROM st_community_user scu_a,(SELECT scu.user_id FROM st_community_user scu ORDER BY scu.create_time DESC LIMIT 870000,100) scu_b WHERE scu_a.user_id = scu_b.user_id;
查詢時長以下圖
至此優化結束。sql