[英]How can I make this query run faster?
我只是想知道是否可以做些什么來使查詢運行更快?
我有這個查詢:
SELECT * FROM posts
WHERE posts.exists = 'n'
ORDER BY posts.ratecount DESC
LIMIT 0,100
需要:2.47秒@ 0,100 | 6.18秒@ 500,100
這可以工作,但是隨着限制的增加(100,100> 200,100等),它往往會變得相當慢。
使用索引似乎也無濟於事:
SELECT * FROM posts
USE INDEX(ratecount_ca)
WHERE posts.exists = 'n'
ORDER BY posts.ratecount DESC
LIMIT 0,100
耗時:8.59秒@ 0,100 | 28.98秒@ 500,100
奇怪的是,沒有WHERE,它就可以完美地工作。
降序索引最有可能解決此問題,但是由於似乎尚未實現,因此我需要另一種選擇。 在訂購后執行WHERE很有可能也會加快速度,但是由於我對SQL不太熟悉,所以我不知道該怎么做:<
您正在使用哪個版本的MySQL? v5.0文檔建議有一種更改索引順序的方法。
我建議在兩個列上都創建索引。 它看起來應該像這樣:
CREATE INDEX index_2_cols ON posts(exists, ratecount DESC);
既然您說省略where條件使其運行起來很快,那么我將嘗試在posts
表的exists
字段上創建索引 :
CREATE INDEX ON posts_exists ON posts (exists(10));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.