我要管理的网站是一个工人搜索引擎(黄页样式)
我创建了一个这样的数据库:
People: <---- 4,000,000 records
id
name
address
id_activity <--- linked to the activites table
tel
fax
id_region <--- linked to the regions table
activites: <---- 1500 activites
id
name_activity
regions: <--- 95 regions
id
region_name
locations: <---- 4,000,000 records
id_people
lat
lon
所以基本上,我遇到的问题是选择一个城市周围的所有“工人”(由用户选择)
我创建的请求正在完全工作,但需要5-6秒才能返回结果。。。
基本上我在桌子上做一个选择位置来选择一定半径内的所有城市,然后加入到人员表中
SELECT people.*,id, lat, lng, poi,
(6371 * acos(cos(radians(plat)) * cos(radians(lat)) * cos(radians(lng) - radians(plon)) + sin(radians(plat)) * sin(radians(lat)))) AS distance
FROM locations,
people
WHERE locations.id = people.id
HAVING distance < dist
ORDER BY distance LIMIT 0 , 20;
我的问题是:
我的数据库设计得好吗?我不知道有两张每张400万张唱片的桌子是不是一个好主意。可以对它进行选择吗?
我的要求设计得不好吗?
如何加快搜索速度?
最佳答案
设计看起来很规范。这是我希望在大多数设计良好的数据库中看到的。表中的数据量很重要,但次要。但是,如果您的查询显示People
和Locations
之间存在1对1的相关性,我会说这些表应该是一个表。这当然会有帮助。
您的SQL看起来不错,不过添加约束以减少所涉及的行数会有帮助。
你需要index your tables。这通常是最有助于缓慢(因为大多数开发人员根本不考虑数据库索引)。