私はこのような構造のデータベースを持っています:
- t_person(idp、idcity、name、addr、tels、zip、desc、premium)
- t_city(idcity、idcountry、cityname)
- t_country(idcountry、countryname)
非常に一般的な「ライブ検索」(グーグルのような)が欲しい:
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秒以上かかります(データジェネレーターでテストしました)。問題は、evey country(1 --- n)の人用に新しいテーブルを作成すると、次のようになります
。t_person_uk、t_person_usa、t_person_spain、それぞれ1500行の場合、この方法で検索が非常に高速になると思います。
PD、検索するAJAX呼び出しを行う前に、すでに0.25秒のタイムアウトがあります。
ありがとう、さようなら。