1つのクエリフィルタを追加してパフォーマンスが低いクエリを1つクエリします。MySQL内部のパフォーマンスを最適化する方法NOT INまたはNOT EXISTSでフィルタリングされたクエリ
`cd`.`categories_id` NOT IN(
SELECT
`p`.`parent_id`
FROM
`products` `p`
WHERE
`p`.`product_type` = 'X'
AND
`p`.`parent_id` = `cd`.`categories_id`
GROUP BY `p`.`product_type`
)
私もNOT EXISTS
を使用してもう一つの解決策を試してみてくださいそれは、次のとおりです。私はこのように見えるか追加されたものを1つの新しいフィルタを持って、このクエリ内
SELECT
`c`.`categories_id`,
`c`.`section_id`,
`c`.`categories_status`,
IF(`c`.`categories_status` = 1, 'ON', 'OFF') AS `categories_status_name`,
TRIM(`cd`.`categories_name`) AS `categories_name`,
IF(`cd`.`concert_date` <> '',
DATE_FORMAT(STR_TO_DATE(`cd`.`concert_date`,'%d/%m/%Y'),'%d.%m.%Y'),
NULL
) AS `concert_date`,
TRIM(`cd`.`concert_time`) AS `concert_time`
FROM
`categories` `c`
JOIN `categories_description` `cd` ON `c`.`categories_id` = `cd`.`categories_id`
WHERE
`c`.`plan_id` > 2
AND
`c`.`categories_status` = '1'
AND
`cd`.`categories_id` NOT IN(
SELECT
`p`.`parent_id`
FROM
`products` `p`
WHERE
`p`.`product_type` = 'X'
AND
`p`.`parent_id` = `cd`.`categories_id`
GROUP BY `p`.`product_type`
)
GROUP BY `c`.`categories_id`
ORDER BY DATE_FORMAT(STR_TO_DATE(`cd`.`concert_date`,'%d/%m/%Y'),'%Y-%m-%d') DESC, `cd`.`categories_name` DESC
:ここ
がいっぱいクエリです多分悪い:NOT EXISTS (
SELECT
DISTINCT 1
FROM
`products` `p`
WHERE
`p`.`product_type` = 'X'
AND
`p`.`parent_id` = `cd`.`categories_id`
GROUP BY `p`.`product_type`
)
私の主な問題は、このフィルタfまたはX
製品を含むカテゴリを削除すると、パフォーマンスが悪化することがあります。このフィルタページのロードがなければ、0.5〜0.8秒の範囲になりますが、このフィルタページのロードは8〜10秒です。
このクエリを最適化するお手伝いがありますか?
そのクエリは巨大ではありません;-) – Zim84
OK私は大きくても小さいです:) –
最初にすべてのサブクエリでGROUP BYを排除します。 MySQLが役に立たないと気付かないと、ソートが開始されます。そしてそのDISTINCTも余分です – Ronald