我有這樣一個結構的數據庫MySQL的:
創建一個表是需要每一個國家 -
- t_person(IDP,idcity,姓名,地址,運輸發射車,拉鍊,遞減,保險費)
- t_city(idcity,idcountry,城市名)
- 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國家(1 --- n)人創建一個新表,如下所示:
t_person_uk,t_person_usa,t_person_spain,每行都有1500行,我認爲這樣搜索會很快速。
PD,在進行AJAX調用搜索之前,我已經有了0.25秒的超時時間。
謝謝,再見。
除非編制索引失敗,否則不要爲每個國家創建表格。你在哪裏定義了索引?你的解釋告訴你什麼? –
全文索引(p.nombre,p.addr,p.zip,p.desc,p。tels)/ 而且EXPLAIN說一切正常,行1,1,1,32000(我用來測試的生成數據)PRIMARY KEY無處不在,Keylength 2,null,3,2,另外:分頁(LIMIT 0, 15)沒有工作,因爲我必須通過最佳匹配來命名,名稱爲ASC,「premium」DESC(某些用戶是「高級」),並且您知道mysql如何工作(這與選擇所有行時相同或最差同時)。 - 無限制= 1.189秒,限制爲0,15 = 1.219秒 – DanStarck
什麼是x.idpais?我沒有看到它在架構中的任何地方。 – matchdav