私はMySQLの専門家ではありませんが、かなり大きなテーブル(600,000行と約90列(私を殺してください...))を継承し、それをリンクするために作成した小さなテーブルがあります。カテゴリテーブル。
左結合を使用して上記のテーブルをクエリしようとしているので、1つのオブジェクトに両方のデータセットがありますが、実行速度が非常に遅く、整理するのに十分な熱さではありません。なぜこんなに遅いのか、ちょっとしたガイダンスと説明をいただければ幸いです。
SELECT
`products`.`Product_number`,
`products`.`Price`,
`products`.`Previous_Price_1`,
`products`.`Previous_Price_2`,
`products`.`Product_number`,
`products`.`AverageOverallRating`,
`products`.`Name`,
`products`.`Brand_description`
FROM `product_categories`
LEFT OUTER JOIN `products`
ON `products`.`product_id`= `product_categories`.`product_id`
WHERE COALESCE(product_categories.cat4, product_categories.cat3,
product_categories.cat2, product_categories.cat1) = '123456'
AND `product_categories`.`product_id` != 0
2つのテーブルはMyISAMであり、productsテーブルにはProduct_numberとBrand_Descriptionにインデックスがあり、product_categoriesテーブルにはすべての列を組み合わせた一意のインデックスがあります。この情報がまったく役に立たない場合。
このシステムを継承したので、私はそれを核兵器にし、それを適切に行う前に、これをできるだけ早く機能させる必要があります。
[編集]explain拡張の出力は次のとおりです。
+----+-------------+--------------------+-------+---------------+------+---------+------+---------+----------+--------------------------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+--------------------+-------+---------------+------+---------+------+---------+----------+--------------------------+
| 1 | SIMPLE | product_categories | index | NULL | cat1 | 23 | NULL | 1224419 | 100.00 | Using where; Using index |
| 1 | SIMPLE | products | ALL | Product_id | NULL | NULL | NULL | 512376 | 100.00 | |
+----+-------------+--------------------+-------+---------------+------+---------+------+---------+----------+--------------------------+