百萬數(shù)據(jù)下mysql條件查詢及分頁查詢的注意事項

接上一節(jié)《百萬數(shù)據(jù)mysql分頁問題》,我們加上查詢條件:

select?id?from?news? where?cate?=?1 order?by?id?desc? limit?500000?,10? 查詢時間?20?秒

好恐怖的速度!!利用第一節(jié)《百萬數(shù)據(jù)mysql分頁問題》知識進行優(yōu)化:

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?秒

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

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

在寫入數(shù)據(jù)時將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倍!!數(shù)據(jù)在10萬左右是查詢時間可以保持在0.5秒左右,是一個逐步接近我們能夠容忍的值!

但是1秒對于服務器來說依然是一個不能接受的值!!還有什么可以優(yōu)化的辦法嗎??我們嘗試了一個偉大的變化:

將 news2 的存儲引擎改變?yōu)閕nnodb,執(zhí)行結(jié)果是驚人的!

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存儲引擎詳解。

以上就是百萬數(shù)據(jù)下

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊15 分享