我有一个结构如下的数据库:
- t_person(idp、idcity、姓名、地址、电话、邮编、降序、保费)
- t_city(idcity,idcountry,城市名)
- t_country(idcountry, 国名)
我想要一个非常通用的“实时搜索”(类似谷歌):
SELECT p.name, p.addr, p.zip, p.desc, c.cityname, x.countryname,
MATCH (p.name, p.addr, p.zip, p.desc)
AGAINST ('fred* tall* 94620*' IN BOOLEAN MODE) as score
FROM t_person p
INNER JOIN t_city c ON c.idcity = p.idcity
INNER JOIN t_country x ON x.idcountry = c. idcountry
WHERE MATCH (p.name, p.addr, p.zip, p.desc)
AGAINST ('fred* tall* 94620*' IN BOOLEAN MODE)
AND x.idcountry = 43 -- (i.e USA)
ORDER BY score DESC, p.name ASC, p.premium DESC
当只有 1000 - 1500 行时,此查询运行大约 0.011 秒,但是当有 30000+ 行时,它将需要大约 1.2+ 秒(我已经使用数据生成器对其进行了测试)。问题是,如果我为每个国家/地区(1 --- n)人创建一个新表,如下所示:
t_person_uk、t_person_usa、t_person_spain,每个都有 1500 行,我认为这样搜索会非常快。
PD,在进行 AJAX 调用搜索之前,我已经有 0.25 秒的超时时间。
谢谢,再见。