我试图找出在过滤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'
当然,在另一种情况下,我需要有标准将这些字符串连接成一个。
一般来说,搜索更多条件或仅使用一个条件会更好吗?
答案 0 :(得分:2)
我相信多列是最好的。您可以索引较少的数据(例如索引country
),SQL可以将数字搜索为INT
而不是将其作为varchar
的一部分进行搜索,从而获得更好的效果
顺便说一句,如果你把它作为一个varchar
列,你也很容易出现空白问题
修改强>
使用多个collumns,您还可以将 common 位置作为外键(在本例中为country
collumn)。这可以提高速度(因为它将被编入索引)并节省磁盘空间(因为每个地址行只有INT
而不是varchar
AND 如果您使用某个类来管理您的DataBase连接(例如PHP中的Doctrine),它可以将country
表缓存在内存中,以获取country
作为int
,然后进行SQL搜索。这将大大提高性能;)