MongoDB和MySQL中的large skip問題、count問題

來源:互聯網
上載者:User

標籤:http   io   os   使用   ar   資料   sp   問題   c   

large skip
在為資料分頁時,一般要skip多少記錄並limit多少記錄,例如在MySQL中:

SELECT * FROM large_table ORDER BY `id` LIMIT 10000, 30



這個過程是很慢的,因為資料庫需要從第一個記錄開始掃描到第10000個記錄,這個比較耗時。

在http://idning.github.io/point-large-skip.html對上面的sql代碼總結了兩個最佳化方法:

方法1:
SELECT  t.*FROM    (        SELECT  id        FROM    large_table        ORDER BY                id        LIMIT 10000, 30        ) qJOIN    large_table tON      t.id = q.id



方法2:
SELECT * FROM large WHERE id >  10000 ORDER BY id LIMIT 30



方法2有個問題,如果資料庫中沒有id為12的記錄,那麼方法2得到的結果和預期是不一樣的

同樣,在mongodb中也有類似的問題,一個比較好的解決方案和上面的MySQL的方法2基本相同。


count
另外,count()查詢也有較慢的問題,最佳化方法如下:
方法1: Try COUNT(ID) instead of COUNT(*), where ID is an indexed column that has no NULLs in it. That may run faster.
方法2: If you‘re storing the binary data of the files in the longblob, your table will be massive, which will slow things down.
方法3:MySQL使用MyISAM索引,其內建了一個計數器。



參考: http://idning.github.io/point-large-skip.html
http://stackoverflow.com/questions/7228169/slow-pagination-over-tons-of-records-in-mongo
http://stackoverflow.com/questions/10764187/mongo-db-skip-takes-too-long-time
http://stackoverflow.com/questions/15402141/mysql-query-very-slow-count-on-indexed-column
http://xue.uplook.cn/database/mysqlsjk/2835.html

MongoDB和MySQL中的large skip問題、count問題

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.