製品のカタログからのクエリにいくつか問題があります。クエリは次のとおりです。
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 を持つテーブルをインデックスとして持つと、より高速になりますか?
ただし、クエリの最初の実行が非常に遅く、その後高速化する理由を説明することはできません