3

製品のカタログからのクエリにいくつか問題があります。クエリは次のとおりです。

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 秒かかり、その後は高速になることに気付きました。テーブル「cms_catalogo」のデータベースには、「cc_famiglia」、「cc_categoria」、および「cc_sottocat」という列があり、内部 ID がカンマで区切られているため、FIND_IN_SET を使用します (ばかげていることはわかっています)。

例:

テーブル cms_catalogo

cc_famiglia : 1,2,3,4,5

テーブル cms_catalogo_famiglia

ccf_id : 3

そのようにFIND_IN_SETを使用すると、クエリの速度が低下する可能性がありますか?

ID をコンマで区切る代わりに、ID を持つテーブルをインデックスとして持つと、より高速になりますか?

ただし、クエリの最初の実行が非常に遅く、その後高速化する理由を説明することはできません

4

1 に答える 1