Mysql SELECT查询和性能

时间:2012-07-19 14:58:48

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

我想知道SELECT查询与不是非常具体的WHERE子句和另一个SELECT查询之间是否存在性能提升,并且具有更具体的WHERE子句。

例如是查询:

SELECT * FROM table1 WHERE first_name='Georges';

慢于这个:

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

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

我不确定是否可以理解,即使我的问题考虑了数据库查询中涉及的所有组件(在我的情况下是MYSQL)

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

4 个答案:

答案 0 :(得分:1)

对此没有严格的规定。

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

  • 索引
  • 架构
  • 数据量
  • data cardinality
  • statistics
  • 查询引擎的智能

您需要使用您的数据集进行测试,并确定最佳效果。

答案 1 :(得分:1)

MySql服务器必须比较WHERE子句中的所有列(如果所有列都加上AND)。

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

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

答案 2 :(得分:1)

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

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

答案 3 :(得分:1)

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

有关如何知道MySQL在执行查询时将要执行的操作的信息。