庫表查詢效率提升設計優化思路,顯著提高查詢效率(主要用於查詢多於刪除的業務)

前言

爲提高查詢效率,現提出以下優化思路,但是這種思路做排序算法(置頂、置底、手動錄入排序號)影響效率,慎重使用,僅供參考。
庫中添加page、index字段用以分割數據組,以便抽取執行ddl語句的公式,模擬:初始page爲1 index爲1,以600爲一組,index值爲600時,page加1 index從1開始計算

1.查詢

參數定義:
	p頁面傳遞的頁數    
	s頁面傳遞的條數       

1.1 獲取當前page下起始條數

select (p * s - FLOOR(p * s /600 )* 600)

1.2. 獲取當前page

select FLOOR(p*s/600) + 1

例:  其中x爲通過 1.1 中 獲取的起始條數
查詢 第1頁 每頁20條 
select * from employee_test  where page = FLOOR(1*20/600)  + 1 limit x,20 order by index_num

查詢 第31頁 每頁20條 
select * from employee_test  where page = FLOOR(31*20/600) + 1 limit x,20 order by index_num

1.3 性能

查詢第500頁,每頁20條
12000條數據時

-- 執行結果0.015  0.020  0.020   0.017   0.016  0.022  0.016   0.029   0.024  0.018
10次平均 0.01973
select * from employee_test  where page = 17 limit  400,20
--執行結果0.023  0.019  0.016  0.019  0.022  0.023  0.018  0.017  0.020  0.015
10次平均 0.0192
select * from employee_test limit 10000,20

24000條數據時

 -- 執行結果0.019  0.016  0.016  0.017  0.020  0.023  0.021  0.024  0.025  0.018
10次平均 0.0199
select * from employee_test  where page = 17 limit  400,20  
--執行結果0.018  0.018  0.017  0.025  0.018  0.023  0.024  0.020  0.019  0.024
10次平均 0.0206
select * from employee_test limit 10000,20

可見 在數據量較少時,添加page和index字段的性能與正常全表分頁性能相比,執行效果略高,但是不明顯,當數據達到一定量級,執行效率開始體現。繼續測試


在對page和index建立聯合索引後,10次執行效果
0.004 0.006 0.005 0.006 0.005 0.005 0.004 0.004 0.004 0.006
10次平均 0.0049

在加上page和index聯合索引,數據24000條,條件不變,執行效率有很大提高


需要注意的事這種思路,只適用於刪除較少的業務,如果中間某條數據操作被刪除,page和index維護起來會增加一定的工作量。慎重使用

2.排序

原算法做數據上移下移排序,沒有問題但是如果涉及到置頂、置底操作可能涉及到全表更新,所以如果需要排序,可另外加一個排序字段,進行排序號的操作。

發佈了17 篇原創文章 · 獲贊 41 · 訪問量 6288
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章