【发布时间】:2011-01-05 17:50:40
【问题描述】:
最近,我被拉进老板办公室,并被告知我的一个问题正在减慢系统速度。然后我被告知这是因为我的WHERE 子句以1 = 1 开头。在我的脚本中,我只是将每个搜索词附加到查询中,所以我添加了1 = 1,这样我就可以在每个搜索词之前附加AND。有人告诉我,这会导致查询在继续缩小结果范围之前进行全表扫描。
我决定测试一下。我们有一个 user 表,其中包含大约 14,000 条记录。这些查询分别使用 phpmyadmin 和 PuTTY 运行了五次。在 phpmyadmin 中,我将查询限制为 500,但在 PuTTY 中没有限制。我尝试了一些不同的基本查询,并尝试在它们上计时。我发现1 = 1 似乎导致查询比完全没有WHERE 子句的查询要快。这是在一个实时数据库上,但结果似乎相当一致。
我希望在这里发帖,看看是否有人可以为我分解结果或向我解释这方面的逻辑。
【问题讨论】:
-
如果您的结果显示更快的结果应该没问题,您是否分析了数据放缓的地方?你用什么计时?
-
我很好奇人们对在 WHERE 子句中使用 1 = 1 的想法。不过你是对的,从我的结果来看,它确实看起来更快——这让我很高兴——但我可能想要一些理由。在任一程序中,查询运行后都会显示“查询花费了 x 秒”。我认为这就足够了。
标签: mysql sql query-optimization where-clause