我的数据库由以下表格组成:商品,价格,供应商,制造商和其他。
CREATE TABLE `articles` (
`id` int(3) NOT NULL,`name` varchar(255) COLLATE utf8_bin NOT NULL,`manufacturer_id` int(3) NOT NULL,`brand_id` int(3) NOT NULL,`category_id` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `prices` (
`id` int(3) NOT NULL,`article_id` int(3) NOT NULL,`price` varchar(50) COLLATE utf8_bin NOT NULL,`supplier_id` int(3) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `suppliers` (
`id` int(11) NOT NULL,`name` varchar(200) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
CREATE TABLE `manufacturers` (
`id` int(5) NOT NULL,`name` varchar(255) COLLATE utf8_bin NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
通过此查询,我输出所有文章并将它们加入其他表。为了根据供应商过滤商品和价格,我将“价格”表加入该查询。
SELECT DISTINCT articles.id,manufacturers.name manufacturer_name,FROM articles
LEFT
JOIN manufacturers
ON articles.manufacturer_id = manufacturers.id
LEFT
JOIN prices
ON articles.id = prices.article_id
此查询的工作非常缓慢(大约6秒钟)。
当我用INNER JOIN替换LEFT JOIN时,输出工作非常快,但没有价格的项目就不会输出。
INNER JOIN prices
ON articles.id = prices.article_id
我该如何优化查询:具有正确加入价格并快速输出价格的商品?