我想知道SELECT
查询与不是非常具体的WHERE子句和另一个SELECT
查询之间是否存在性能提升,并且具有更具体的WHERE
子句。
例如是查询:
SELECT * FROM table1 WHERE first_name='Georges';
慢于这个:
SELECT * FROM table1 WHERE first_name='Georges' AND nickname='Gigi';
换句话说,是否存在与WHERE
子句的精度相关联的时间因素?
我不确定是否可以理解,即使我的问题考虑了数据库查询中涉及的所有组件(在我的情况下是MYSQL)
我的问题与Django框架有关,因为我想缓存一个已评估的查询集,并在下一个请求中收回这个缓存评估的查询集,对其进行过滤,然后再对其进行评估。
答案 0 :(得分:1)
对此没有严格的规定。
通过向WHERE
子句添加更多条件,可以提高或降低性能,因为它取决于以下内容:
您需要使用您的数据集进行测试,并确定最佳效果。
答案 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在执行查询时将要执行的操作的信息。