【问题标题】:Multiple select queries using one table (improve performance)使用一张表进行多个选择查询(提高性能)
【发布时间】:2015-08-19 09:06:33
【问题描述】:

有没有办法改进这个查询?

 SELECT variety_id FROM anvariety_trait WHERE variety_id IN
 (SELECT variety_id FROM anvariety_trait WHERE trait_id = 10 and trait_value =     2 and variety_id IN 
 (SELECT variety_id FROM anvariety_trait WHERE trait_id = 9 and trait_value = 1 and variety_id IN 
 (SELECT variety_id FROM anvariety_trait WHERE trait_id = 7 and trait_value = 1 )))

我试图从同一个表中获取三个级别的选择查询的一个结果。提前致谢。

【问题讨论】:

    标签: mysql performance


    【解决方案1】:

    您可以尝试连接子句和一个独特的,但我不确定这会提高您的性能(无论如何值得一试)

    select distinct v1.variety_id 
    FROM anvariety_trait v1
    join anvariety_trait v2 on v1.variety_id = v2.variety_id
    join anvariety_trait v3 on v2.variety_id = v3.variety_id
    join anvariety_trait v4 on v3.variety_id = v4.variety_id
    where v2.trait_id = 10 and v2.trait_value = 2
    and   v3.trait_id = 9  and v3.trait_value = 1
    and   v4.trait_id = 7  and v4.trait_value = 1
    

    【讨论】:

    • 非常感谢先生。奇迹般有效。 ;)
    • @Sandy Pabilonia 作为旁注:当您在variety_idtrait_value 上拥有一个像这样KEY(variety_id, trait_value) 这样的密钥时,您可以进一步提高性能KEY(variety_id, trait_value)这种方式 mysql 不需要使用连接缓冲区和不同的临时表
    • 假设这是 InnoDB,我会推荐INDEX(trait_id, trait_value, variety_id)
    • 我怀疑是否需要DISTINCT
    • @RickJames distinct 需要我才能获得独特的价值
    猜你喜欢
    • 1970-01-01
    • 2019-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-09
    • 1970-01-01
    • 2020-08-29
    • 1970-01-01
    相关资源
    最近更新 更多