【问题标题】:Mysql SELECT query and performanceMysql SELECT查询和性能
【发布时间】:2012-07-18 19:13:03
【问题描述】:

我想知道在带有不太具体的 WHERE 子句的 SELECT 查询和带有更具体的 WHERE 子句的另一个 SELECT 查询之间是否有性能提升。

例如是查询:

SELECT * FROM table1 WHERE first_name='Georges';

比这个慢:

SELECT * FROM table1 WHERE first_name='Georges' AND nickname='Gigi';

换句话说,是否存在与WHERE 子句的精度相关的时间因素?

我不确定是否很容易理解,即使我的问题考虑到了数据库查询中涉及的所有组件(在我的例子中是 MYSQL)

我的问题与 Django 框架有关,因为我想缓存一个评估过的查询集,并在下一个请求时取回这个缓存评估过的查询集,对其进行更多过滤,然后再次评估它。

【问题讨论】:

    标签: mysql django performance django-queryset database-performance


    【解决方案1】:

    对此没有硬性规定。

    通过向WHERE 子句添加更多条件可以提高或降低性能,因为它取决于以下因素:

    • 索引
    • 架构
    • 数据量
    • 数据基数
    • 统计数据
    • 查询引擎的智能

    您需要使用您的数据集进行测试并确定性能最佳的方法。

    【讨论】:

      【解决方案2】:

      MySql 服务器必须比较您的 WHERE 子句中的所有列(如果全部由 AND 加入)。

      因此,如果您在列 nickname 上没有任何索引,则第二次查询会稍微慢一些。

      您可以在此处阅读列索引的工作原理(示例与您的问题类似):http://dev.mysql.com/doc/refman/5.0/en/mysql-indexes.html

      【讨论】:

        【解决方案3】:

        我认为这个问题很难回答,涉及的方面太多(例如:索引)。我会说第一个查询比第一个查询,但我不能肯定。

        如果这对您很重要,为什么不运行模拟(例如:运行 1'000'000 次查询)并检查时间?

        【讨论】:

        • 我在数据库中有大量条目,很可能会执行类似的请求,并通过不同的请求进行细化。无论如何,谢谢,我会尝试通过对我的案例进行模拟来找到最好的方法。你会说哪个比另一个更快?第一比第二快还是相反?
        【解决方案4】:

        是的,它可能会更慢。这一切都取决于您拥有的索引和数据分布。 查看链接Understanding the Query Execution Plan

        有关如何知道 MySQL 在执行查询时要做什么的信息。

        【讨论】:

        猜你喜欢
        • 2023-03-24
        • 2021-04-18
        • 1970-01-01
        • 2016-03-09
        • 1970-01-01
        • 2014-11-25
        • 2014-03-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多