为SELECT查询添加更多特异性会使它更快吗?

时间:2012-01-13 22:35:03

标签: mysql sql

我有一张相当大的表,有150,000条记录。它有很多字段,例如country_id,region_id,city_id,纬度,经度,postal_code,仅举几例。

我需要根据纬度和经度从这张表中选择,没有别的。我的查询如下:

SELECT * FROM `mytable` 
  WHERE `latitude` = '$latitude' 
  AND `longitude` = '$longitude';

现在虽然我从这个表中选择的唯一标准是纬度/经度,但我想知道添加更多特异性会加快查询速度,如:

SELECT * FROM `mytable` 
  WHERE `city_id` = '320' 
  AND `latitude` = '$latitude' 
  AND `longitude` = '$longitude';

对我来说,在查询中添加更多条件可以加快速度,但与此同时,我通过首先确保选择的所有记录都来自某个特定范围,大大缩小了可能结果的数量我所知道的城市ID位于我将在下一步指定的纬度和经度范围内。

总记录可能约为150k,但距离该特定城市仅约10k。

这是明智的还是我只是让查询更耗时?

2 个答案:

答案 0 :(得分:6)

通常,在查询中为WHERE子句添加条件对执行时间没有太大影响。但是,如果将索引添加到WHERE子句中提到的字段,则可以显着提高性能。

因此,在您的示例中,如果city_id上没有索引,并且您要将该条件添加到WHERE子句并在该字段上创建索引,那么您可能会看到相当大的性能改善。

答案 1 :(得分:2)

添加标准可以采用任何一种方式,但通常更多标准确实有助于提高性能,特别是如果列具有索引。

在你的情况下,如果你有一个包含city_id和long和lat的索引,你将获得更好的表现。