我有一张相当大的表,有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。
这是明智的还是我只是让查询更耗时?
答案 0 :(得分:6)
通常,在查询中为WHERE
子句添加条件对执行时间没有太大影响。但是,如果将索引添加到WHERE
子句中提到的字段,则可以显着提高性能。
因此,在您的示例中,如果city_id
上没有索引,并且您要将该条件添加到WHERE
子句并在该字段上创建索引,那么您可能会看到相当大的性能改善。
答案 1 :(得分:2)
添加标准可以采用任何一种方式,但通常更多标准确实有助于提高性能,特别是如果列具有索引。
在你的情况下,如果你有一个包含city_id和long和lat的索引,你将获得更好的表现。