【发布时间】:2016-03-24 10:57:03
【问题描述】:
我对 mysql 比较陌生,所以我希望你能指出我正确的方向。我有两张表,“产品”是关于我们要出售的商品的信息,“报价”表是我们销售该产品的各个供应商的定价和供应商信息。两个表都有相关的“sku”列。 'offers' 表中可以有多个供应商销售相同的 sku。
当我在 products 表中查询各种东西时,我只想要有供应商从“offers”表中销售它的结果。现在我正在使用如下查询:
SELECT *
FROM products
WHERE
products.sku IN (SELECT offers.sku FROM offers)
AND
products.name = 'Iphone'
AND
blah.....
对于有很多结果的查询,这可能需要比我想要的更长的时间。有没有更有效的方法来查询这两个表?也许加入?谢谢。
【问题讨论】:
-
将其转换为 JOIN 语法可能具有与通常非常聪明的优化器相同的性能。谓词的数据类型和索引是什么?
products.sku、products.name等 -
products.sku 是主键,所以它有自己的索引,offers.sku 也有自己的索引。两者的数据类型都是 CHAR(12),因为我们所有的 sku 都是 12 个字符长。
-
您能否从查询中省略
sku谓词以验证它是否确实是您的性能问题的原因? -
-
SELECT products.* FROM products JOIN offers ON offers.sku = products.sku WHERE products.name = 'Iphone'是 JOIN 语法,虽然我认为它不会帮助您解决性能问题,但可能值得进行测试。