我想知道哪种数据库设计更有效率。在此之前,我的场景是我想使用google places api进行搜索。API将返回给我城市,州,国家和我有与这些数据有关系的列表。
在列表和位置之间将有多对多
第一次尝试:
Location Table
-id
-city
-states
-country例如:
City | States | Country
A | B | C
D | B | C
E | F | G当我搜索google API并返回给我响应时,我将检查表格并搜索城市、州和国家列。因此,这3列将被编入索引。
第二次尝试:
Location Table
-id
-parent_id
-name所以,这就像是层级结构。因此,基本上,如果我试图搜索列表,如果它是国家,我将不得不查询孩子(州),然后从子列表,我需要再次查询,以获得特定的孩子(城市),以获得所有列表,我认为这将包括更多的查询涉及?
那么,当数据增长时,搜索表的最佳数据库设计是什么?在使用Google Places API时有什么建议的数据库设计吗?
发布于 2014-05-21 00:52:07
我以前遇到过这个问题,并尝试了许多选项,其中对我最有效的一个是制作三个表:城市、区域和国家。
countries [id,name]
zones [id,country_id,name]
cities[id,country_id,zone_id,name]首先查询Countries表(只有190行,非常快)
SELECT id FROM countries WHERE name LIKE 'Spain';之后,您可以使用country_id查询区域表,以限制比较的字符串数。
SELECT id FROM zones WHERE country_id = {Your country id} AND name LIKE 'Leon';最后,查询城市
SELECT name FROM cities WHERE country_id = {Your country id} AND zone_id = {Your zone id} AND name LIKE 'Villabúrbula';发布于 2014-05-21 20:58:32
如何在表中进行搜索?您是否从API中获取国家/地区、城市和州/地区,然后只查找列表?请把你的问题说清楚一点。
由于城市和城镇的总体数量相当有限(在美国大约有30K?),我将非常简单地结合
位置表
-id
-city
-states
-country使用index (country, states, city)和mysql查询缓存:
select SQL_CACHE group_concat(id) from location where country={country} and states={states} and city={city}发布于 2014-05-25 00:39:10
在我看来,您可以继续使用您的数据模型,并尝试主要使用索引来优化您的数据,正如您所知道的,数据库查询性能优化并不局限于索引,甚至有公司专门为其数据库的优化任务雇用工程师。对于索引,它取决于您的sql查询,所以下面是一个如何选择索引的图表:

你可以找到最初的帖子here,它提供了一些关于SQL性能优化和查询数据库的最佳实践的很好的技巧,因为很难提到所有的优化技巧,所以我建议你使用这个link。
https://stackoverflow.com/questions/23684008
复制相似问题