Mysql優化之延遲關聯

2021-09-17 08:34:52 字數 521 閱讀 8859

有如下sql:select * from user where name='abc' order by age limit  10000,10。這個語句同時使用了order和limit,如果沒有索引的話會很慢。那麼可以加上如下索引(name,age)。但是加索引之後可能還是很慢,因為這個索引不是覆蓋索引,查詢欄位為*,需要回表取索引之外的字段。因為這條語句實際上只需要10條資料,所以可以針對limit進行優化,優化方案有兩種:

select * from user a join (select id from user where name='abc' order by age limit  10000,10) b on a.id=b.id

優化原理:第乙個語句根據索引查詢name='abc『的資料並排序,然後回表通過主鍵查詢所有匹配行的其他字段,最後捨棄前10000條資料,只取10條。第二個語句也是根據索引查詢name='abc『的資料並排序,然後捨棄前10000個主鍵,只取10個主鍵,再連表通過這10個主鍵查詢其他字段。可以看到全部匹配行回表查字段的過程被優化成了10條記錄的回表。

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是乙個...

MySQL優化之關聯查詢優化

前言 sql語句優化是很重的乙個事情。所以要去做。正文一 left join 先寫乙個sql語句看看怎麼效能如何 這樣的情況怎麼去優化呢?肯定是使用到的查詢欄位去建索引。哪就先給idx card表的card欄位加上索引看看有沒有效果。執行 alter 建完索引後再接著執行咱們的查詢語句看看怎麼樣了。...

MySQL延遲關聯效能優化方法改進版

高效能mysql 也提到了延遲關聯,是這樣的 改進前 select from t portal user where create time 2012 10 10 and create time 改進後 select from t portal user inner join select id f...