首頁  >  文章  >  資料庫  >  百萬資料下mysql條件查詢及分頁查詢的注意事項

百萬資料下mysql條件查詢及分頁查詢的注意事項

藏色散人
藏色散人轉載
2019-04-17 17:53:083620瀏覽

接續上一節《百萬資料mysql分頁問題》,我們加上查詢條件:

select id from news 
where cate = 1
order by id desc 
limit 500000 ,10 
查询时间 20 秒

好恐怖的速度! !利用第一節《百萬資料mysql資料測試環境介紹》知識進行最佳化:

select * from news
where cate = 1 and id > (select id from news where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10 
查询时间 15 秒

最佳化效果不明顯,條件帶來的影響還是很大!在這樣的情況下無論我們怎麼去優化sql語句就無法解決運行效率問題。那麼換個思路:建立一個索引表,只記錄文章的id、分類信息,我們將文章內容這個大字段分割出去。

表 news2 [ 文章表 引擎 myisam 字符集 utf-8 ]
-------------------------------------------------
idint11主键自动增加
cateint11索引

在寫入資料時將2張表同步,查詢是則可以使用news2 來進行條件查詢:

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10

注意條件 id > 後面使用了news2 這張表!

運行時間 1.23秒,我們可以看到運行時間縮減了近20倍! !資料在10萬左右是查詢時間可以維持在0.5秒左右,是一個逐步接近我們所能容忍的值!

但是1秒對伺服器來說還是一個不能接受的值! !還有什麼可以優化的方法嗎? ?我們嘗試了一個偉大的變化:

將 news2 的儲存引擎改為innodb,執行結果是驚人的!

select * from news
where cate = 1 and id > (select id from news2 where cate = 1 order by id desc limit 500000,1 ) 
order by id desc 
limit 0,10

只需要 0.2秒,非常棒的速度。為什麼會有怎麼大的差異呢?請觀看下一篇 mysql儲存引擎詳解。

以上是百萬資料下mysql條件查詢及分頁查詢的注意事項的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:hcoder.net。如有侵權,請聯絡admin@php.cn刪除