[英]Speed of query using FIND_IN_SET on MySql
我從產品目錄中查詢了幾個問題。 查詢如下:
SELECT DISTINCT (cc_id) FROM cms_catalogo
JOIN cms_catalogo_lingua ON ccl_id_prod=cc_id
JOIN cms_catalogo_famiglia ON (FIND_IN_SET(ccf_id, cc_famiglia) != 0)
JOIN cms_catalogo_categoria ON (FIND_IN_SET(ccc_id, cc_categoria) != 0)
JOIN cms_catalogo_sottocat ON (FIND_IN_SET(ccs_id, cc_sottocat) != 0)
LEFT JOIN cms_catalogo_order ON cco_id_prod=cc_id AND cco_id_lingua=1 AND cco_id_sottocat=ccs_id
WHERE ccc_nome='Alpine Skiing' AND ccf_nome='Ski'
我注意到第一次查詢平均需要4.5秒,然后變得很快。 我使用FIND_IN_SET因為在我的數據庫表“cms_catalogo”中我有“cc_famiglia”,“cc_categoria”和“cc_sottocat”列,內部ID用逗號分隔(我知道它很愚蠢)。
例:
表 cms_catalogo
專欄 cc_famiglia :1,2,3,4,5
表 cms_catalogo_famiglia
列 ccf_id :3
查詢的減速可能源於使用FIND_IN_SET那種方式?
如果沒有用逗號分隔的ID而不是具有ID作為索引的表會更快嗎?
但是,我無法解釋為什么第一次執行查詢的速度非常慢,然后加速
最好在表之間使用約束連接。 所以你最好通過主鍵連接它們。
如果您只想快速優化此查詢:
explain select ...
以查看查詢的性能; ccc_id, ccf_id, ccs_id
添加索引; explain select ...
添加索引后。 第一個MySQL查詢需要花費更多時間,因為它是原始查詢,下一個是高速緩存。 所以你應該依賴第一個查詢時間。 如果報告不復雜,則執行時間應小於50-100ms,否則可能會導致性能問題。 因為我非常確定它不是您應用程序的唯一查詢。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.