天天看點

MySQL 百萬級分頁優化 資料庫優化

一般剛開始學SQL的時候,會這樣寫:

<code>SELECT</code> <code>* </code><code>FROM</code> <code>table</code> <code>ORDER</code> <code>BY</code> <code>id LIMIT 1000, 10;</code>

但在資料達到百萬級的時候,這樣寫會慢死。也許耗費幾十秒,網上很多優化的方法是這樣的:

<code>SELECT</code> <code>* </code><code>FROM</code> <code>table</code> <code>WHERE</code> <code>id &gt;= (</code><code>SELECT</code> <code>id </code><code>FROM</code> <code>table</code> <code>LIMIT 1000000, 1) LIMIT 10;</code>

是的,速度提升到0.x秒了,看樣子還行了,可是,還不是完美的!以下這句才是完美的:

<code>SELECT</code> <code>* </code><code>FROM</code> <code>table</code> <code>WHERE</code> <code>id </code><code>BETWEEN</code> <code>1000000 </code><code>AND</code> <code>1000010;</code>

比上面那句,還要再快5至10倍。另外,如果需要查詢 id 不是連續的一段,最佳的方法就是先找出 id ,然後用 in 查詢:

<code>SELECT</code> <code>* </code><code>FROM</code> <code>table</code> <code>WHERE</code> <code>id </code><code>IN</code><code>(10000, 100000, 1000000...);</code>

再分享一點,查詢字段一較長字元串的時候,表設計時要為該字段多加一個字段,如,存儲網址的字段

查詢的時候,不要直接查詢字元串,效率低下,應該查詭該字串的crc32或md5

本文轉自 stock0991 51CTO部落格,原文連結:http://blog.51cto.com/qing0991/1790297