2011-09-01 189 views
0

此查詢對MyISAM表到永遠:的MySQL:查詢沒有結果

SELECT * FROM table 
      WHERE link_id = 1 and counted = 1 

現在,如果我不通過計算,它變得真快。當我通過計算,它只是需要永遠。這是一張大桌子,但我沒有看到它卡住的原因,而不是隻顯示一張空桌子。

任何想法?

+1

你有什麼專欄索引? –

+0

'table'上存在哪些索引(如果有)? –

+1

請發佈您的表的創建語句。 – Poodlehat

回答

0

這是因爲它必須通過每行都過濾counted=1。您是否在link_id上設置了索引?如果是這樣,你可以設置一個爲counted

+0

但是無論如何不需要遍歷多行? (沒有後查詢操作) – 2011-09-01 19:45:24

1

運行這個來看看你的表是否有合適的索引。也許算沒有索引?

EXPLAIN SELECT * FROM table WHERE link_id = 1 and counted = 1 
+0

這就是我得到的:id:1,select type:SIMPLE,table:table,\t type:ref,possible_keys:IX_2,IX_1,IX_3,key:IX_1,key_len:4 ,ref:const,rows:33333,extra:using where – luqita

0

我的猜測是,你只是缺少一個索引。試試這個:

SHOW INDEXES FROM <your table name> 

你看到column_namecounted

如果沒有,那麼你可能想:

CREATE INDEX <nifty index name> ON <your table name> (counted); 

我接下來會看EXPLAIN(其彌解釋here)。 (我只建議解釋第二,因爲我的經驗是,大多數的時間問題是一個簡單的缺失索引如果查詢很慢。)

1

上的索引(link_id,計)將使該查詢快。