[英]How can I improve query performance based off explain/indexing
SELECT journey.code
FROM journey
JOIN journey_day ON journey_day.journey = journey.code
JOIN pattern ON pattern.code = journey.pattern
JOIN link ON link.section = pattern.section
WHERE journey_day.day = 5 AND TIME(NOW()) BETWEEN journey.departure AND journey.end
GROUP BY journey.code
上面的查詢平均需要500ms-1s。 這是說明的屏幕截圖: http : //i.imgur.com/YqSdrAH.png
我不知道為什么要花這么長時間,我正在嘗試優化查詢,以便它執行<= 100ms。
可悲的是,SQL Fiddle目前似乎在構建原理圖/查看Fiddles時遇到技術問題,因此,我將嘗試描述以下設置的索引:
指數:
獨特:
有什么想法為什么會這樣?
需要提及的幾項...。您似乎在各個列上都有索引,而不是多個字段的復合單個索引,尤其是旅程表。 我建議以下指標
journey (departure, end, code, pattern )
journey_day ( journey, day )
pattern (code)
link (section)
其次,您只是從旅程表中獲取代碼,而實際上沒有從模式表或鏈接表中進行任何操作,因此我不知道為什么將它們包括在查詢中,並且可能被簡化為
SELECT DISTINCT j.code
FROM journey j
JOIN journey_day jd
ON j.code = jd.journey
AND jd.day = 5
WHERE
TIME(NOW()) BETWEEN j.departure AND j.end
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.