SQL - 在许多条件下使用SQL进行搜索

时间:2014-01-11 19:34:10

标签: mysql sql

我试图找出在过滤Table时如何获得更好的性能。 在我的具体情况下,我正在过滤位置表,其中包含用于Google地理位置(路线,街道号码,城市,国家/地区等)的列。

现在,所有这些值都在不同的列中,我可以简单地使用多个条件进行过滤,但我感兴趣的是这个多个条件如何影响搜索?

在1个字段中搜索所有参数的完整地址或分别搜索每个字段会更好吗?

例如,用Q1过滤是否更好:

SELECT * FROM locations WHERE route='some route' AND street_number='x' AND country='xy'

或Q2:

SELECT * FROM location WHERE full_route='some route x, xy'

当然,在另一种情况下,我需要有标准将这些字符串连接成一个。

一般来说,搜索更多条件或仅使用一个条件会更好吗?

1 个答案:

答案 0 :(得分:2)

我相信多列是最好的。您可以索引较少的数据(例如索引country),SQL可以将数字搜索为INT而不是将其作为varchar的一部分进行搜索,从而获得更好的效果 顺便说一句,如果你把它作为一个varchar列,你也很容易出现空白问题

修改
使用多个collumns,您还可以将 common 位置作为外键(在本例中为country collumn)。这可以提高速度(因为它将被编入索引)并节省磁盘空间(因为每个地址行只有INT而不是varchar

AND 如果您使用某个类来管理您的DataBase连接(例如PHP中的Doctrine),它可以将country表缓存在内存中,以获取country作为int,然后进行SQL搜索。这将大大提高性能;)