利用延遲關聯或者子查詢優化超多分頁場景

2021-10-06 22:50:56 字數 588 閱讀 4311

【推薦】利用延遲關聯或者子查詢優化超多分頁場景。

說明:mysql 並不是跳過 offset 行,而是取 offset+n 行,然後返回放棄前 offset 行,返回

n 行,那當 offset 特別大的時候,效率就非常的低下,要麼控制返回的總頁數,要麼對超過

特定閾值的頁數進行 sql 改寫。

正例:先快速定位需要獲取的 id 段,然後再關聯:

select a.* from 表 1 a, (select id from 表 1 where 條件 limit 100000,20 ) b where a.id=b.id

mysql 分頁並不是跳過 offset 行,而是取 offset +n 行,然後返回放棄前 offset 行,返回

n 行,所以當 offset 特別大的時候,效率就非常的低下,要麼控制返回的總頁數,要麼對超過

特定閾值的頁數進行 sql 改寫。

例(先快速定位需要獲取的id範圍):

select a.* from 表 1 a, (select id from 表 1 where 條件 limit 100000,20 ) b where a.id=b.id

MySQL 利用延遲關聯優化分頁查詢

通常會有一些起點巨大的分頁查詢,效率低下,例如 select from tab where create date 2018 12 20 13 20 10 and create date 2019 05 01 14 00 00 order by id limit 328000,10 假設tab是乙個...

利用子查詢優化SQL

在千萬級別的資料表中以乙個無索引的列作為查詢條件,結果可想而知,大部分情況下肯定是非常耗時。這無疑造成的結果就是,這樣的慢sql查詢,輕則只是影響使用它的介面,重則在使用者請求量大的情況下佔滿我們的資料庫資源,造成生產環境業務的不能操作。所以對於大資料量的查詢,我們需要建立適合的索引來優化查詢。一般...

關聯查詢 單行子查詢返回多列

例1 select from table1 where id select id from table1 由於子查詢結果中有多行,但是where條件id 只能有一行記錄 例2 select select name from emp where a.job b.job from emp 由於 子查詢的...