我有以下查詢運行鍼對MySQL數據庫:問題與MySQL查詢花費很長的時間
select value from fact_data
join entities on fact_data.entity_id=entities.id
where entities.ticker='{value}'
limit 1
fact_data是一個很大的表> 2300萬條記錄。如果{values}存在於entities.ticker中,那麼查詢將在一秒之內返回。但是如果{value}不存在,查詢需要2分鐘才能返回。就好像正在對fact_table進行表掃描一樣。爲什麼不首先檢查是否存在{value}的entities.ticker,如果沒有,則不需要做任何額外的處理。
順便說一句,這裏是對上述的查詢的解釋的輸出:
id,select_type,table,type,possible_keys,key,key_len,ref,rows,Extra
1,SIMPLE,fact_data,ALL,NULL,NULL,NULL,NULL,23414811,
1,SIMPLE,entities,eq_ref,PRIMARY,PRIMARY,4,findata.fact_data.entity_id,1,"Using where"
你索引了entities.ticker嗎? – Hope4You 2012-03-05 22:50:21
在entities.ticker上是否有索引?或在fact_data.entity_id或entities.id? – 2012-03-05 22:50:35
當查詢返回數據時,只需要很短的時間,因爲它會提前發現匹配並退出,因爲您指定的限制爲1.當沒有值時,它將繼續遍歷所有記錄 – 2012-03-05 22:57:52