2015-05-02 33 views
-1

我有一個超過200,000 +行的表& 81列。我有31個指標。昨天我在一列上添加了一個新索引。現在,當我在where子句中單獨使用該列時,結果非常快。但只要我在不同的索引列的where子句中添加另一個條件,查詢就會變慢。對於例如,如果我有columsn C1,C2,C3,C4與索引,所有查詢:Mysql索引怪異行爲

select c1,c2 from table1 where c1=a and c2=b and c3 = d

是非常快的。但是,當我在現有列C5增加了新的指數,像查詢:

select c5 from table1 where c5>a

是快,但只要我添加像

select c5 from table1 where c5>a and c1=b

查詢新的條件變得更慢。當我說慢時,它慢15-20倍。快速查詢需要0.2秒,慢速查詢需要3-4秒。

幫助非常必要。由於

+3

您是否嘗試添加[複合索引](https://dev.mysql.com/doc/refman/5.0/en/multiple-column-indexes.html)? – namezero

+0

您可能想查看覆蓋索引。 –

+3

使用'EXPLAIN'來分析查詢。不要索引所有內容。索引不是幻想的獨角獸,你希望事情變得更快。總是指定你的數據集大小,不管你是否使用'InnoDB',如果是,你的'innodb_buffer_pool_size'變量的值是什麼。此外,81列和31索引的東西只是尖叫「請刪除我,並規範我以備將來使用」。 –

回答

0

首先,你可以使用複合索引(多於1場索引)

其次,你可以檢查查詢計劃,作爲

EXPLAIN SELECT [...] 

(當然實際的select語句。)

如果你能證明的

SHOW CREATE TABLE 

輸出和解釋的緩慢的查詢,我們可以弄清楚該怎麼做。