分頁查詢是最常用的場景之一,但通常也是最容易出問題的地方。比如對於下面簡單的語句,一般 dba 想到的辦法是在 type, name, create_time 欄位上加組合索引。這樣條件排序都能有效的利用到索引,效能迅速提公升。
好吧,可能90%以上的 dba 解決該問題就到此為止。但當 limit 子句變成 「limit 1000000,10」 時,程式設計師仍然會抱怨:我只取10條記錄為什麼還是慢?select *
from tstb_log
where type = 'sqlstats'
and name = 'slowlog'
order by create_time
limit 1000, 10;
要知道資料庫也並不知道第1000000條記錄從什麼地方開始,即使有索引也需要從頭計算一次。出現這種效能問題,多數情形下是程式設計師偷懶了。
。sql 重新設計如下:
在新設計下查詢時間基本固定,不會隨著資料量的增長而發生變化。select *
from tstb_log
where type = 'sqlstats'
and name = 'slowlog'
and create_time > '2017-03-16 14:00:00'
order by create_time limit 10;
oracle分頁查詢千萬級優化
在做比對專案時,有表是3千萬多的資料,在頁面做分頁查詢時很卡40s,反正差不多一分鐘的時間,後來更了sql,優化了 就好了很多,4s就可以了 sql是取條數時不要用and,between這些 優化後的sql select from select c.a.rownum rn from tt crm c...
Oracle千萬條記錄的測試
客戶 訂單 訂單項 插入資料的儲存過程如下 create or replace procedure createusers is v sequ user number 19 v sequ order number 19 begin for v count in 1.1000000 loop inse...
mysql千萬級資料分頁查詢效能優化
1.直接用limit start,count分頁語句,也是我程式中用的方法 select from product limit start,count 當起始頁較小時,查詢沒有效能問題,我們分別看下從10,100,1000,10000開始分頁的執行時間 每頁取20條 如下 select from p...