0

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

4 回答 4

1

是的,它可能会更慢。这一切都取决于您拥有的索引和数据分布。检查链接了解查询执行计划

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

于 2012-07-19T15:06:49.827 回答
1

对此没有硬性规定。

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

  • 索引
  • 图式
  • 数据量
  • 数据基数
  • 统计数据
  • 查询引擎的智能

您需要使用您的数据集进行测试,并确定什么表现最好。

于 2012-07-19T15:00:52.680 回答
1

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

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

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

于 2012-07-19T15:02:29.203 回答
1

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

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

于 2012-07-19T15:03:09.547 回答