簡體   English   中英

如何根據解釋/索引來提高查詢性能

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

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