簡體   English   中英

如何使該查詢運行更快?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM