Mysql 向SELECT查询添加更多的特殊性是否会加快查询速度?
我有一个相当大的表,有150000多条记录。它有很多字段,比如国家id、地区id、城市id、纬度、经度、邮政编码等等 我需要根据纬度和经度从这个表中进行选择,没有其他选择。我的查询如下所示:Mysql 向SELECT查询添加更多的特殊性是否会加快查询速度?,mysql,sql,Mysql,Sql,我有一个相当大的表,有150000多条记录。它有很多字段,比如国家id、地区id、城市id、纬度、经度、邮政编码等等 我需要根据纬度和经度从这个表中进行选择,没有其他选择。我的查询如下所示: SELECT * FROM `mytable` WHERE `latitude` = '$latitude' AND `longitude` = '$longitude'; 现在,虽然我从这个表中选择的唯一标准是纬度/经度,但我想知道添加更多的特殊性是否会加快查询速度,如: SELECT *
SELECT * FROM `mytable`
WHERE `latitude` = '$latitude'
AND `longitude` = '$longitude';
现在,虽然我从这个表中选择的唯一标准是纬度/经度,但我想知道添加更多的特殊性是否会加快查询速度,如:
SELECT * FROM `mytable`
WHERE `city_id` = '320'
AND `latitude` = '$latitude'
AND `longitude` = '$longitude';
在我看来,向查询中添加更多条件可能会加快查询速度,这似乎与直觉相反,但与此同时,我首先要确保所选的所有记录都来自我知道位于我将要指定的纬度和经度范围内的特定城市id,从而大大缩小了可能结果的数量下一个
可能总共有大约15万条记录,但离那个特定城市只有大约10公里
那么,这是明智之举还是我只是让查询更加耗时?一般来说,在查询中向
WHERE
子句添加条件不会对执行时间产生太大影响。但是,如果向WHERE
子句中提到的字段添加索引,则可以显著提高性能
因此,在您的示例中,如果在
city\u id
上没有索引,并且您要将该条件添加到WHERE
子句中并在该字段上创建索引,您可能会看到相当大的性能改进。添加标准可能会有任何效果,但通常更多的标准确实有助于提高性能,特别是如果列具有索引
在你的例子中,如果你有一个包含city_id、long和lat的索引,你会得到更好的性能。有点困惑,因为你第一次说在where子句中添加条件通常不会对速度产生太大影响,然后你会说,如果我对where子句中提到的所有3个字段进行索引,我将获得相当大的性能改进。那么,为了澄清您的建议(假设所有3个字段都有索引)?我是否应该在其他两个条件之前添加额外的city_id='whatever'?@user1128811-通常,每当我在WHERE子句(或连接)的条件中包含字段时,我都会确保该字段被适当地索引。通过这种方式,我确保数据库服务器将扫描(小)索引而不是(大)表,以从结果集中删除记录。就您应该将条件放入的顺序而言,这是一项可以通过优化器或查询分析器来考虑的任务。