我嘗試加入3個表的查詢有一個奇怪的問題。 descibed的表:JOIN的奇怪行爲
2類似的表所示(entr_es):
Field Type Null Key Default Extra
espid int(11) NO PRI NULL auto_increment
haslo text NO MUL NULL
kat int(11) NO NULL
第二個表看起來是相同的,除了第一列WHIS名爲polid。
第三個表是:
Field Type Null Key Default Extra
polid int(11) NO PRI NULL
espid int(11) NO PRI NULL
這裏是查詢:
第一招:
SELECT entr_pl.haslo AS srchaslo, entr_es.haslo AS trghaslo
FROM entr_es, entr_pl, rel_pl_es
WHERE entr_pl.polid=rel_pl_es.polid
AND rel_pl_es.espid=entr_es.espid
AND entr_pl.haslo LIKE "%ludzk%"
工作速度快,約0.2秒。這對我來說已經足夠了。
但另外一個,這幾乎是相同的,但相反的:
SELECT entr_es.haslo AS srchaslo, entr_pl.haslo AS trghaslo
FROM entr_es, entr_pl, rel_pl_es
WHERE entr_pl.polid=rel_pl_es.polid
AND rel_pl_es.espid=entr_es.espid
AND entr_es.haslo LIKE "%hum%"
工作壞 - 結果是OK,但查詢需要大約2.2到執行,我不知道爲什麼。我查看了解釋,但我發現的唯一的事情是,第二個查詢,即慢速查詢,是「使用臨時」。我不知道爲什麼。我確定有一些顯而易見的東西我看不到,也許還有一種方法可以簡化這些查詢。
請幫忙提前十分感謝, 最好的問候,
卡米爾
=======
實在對不起 - 我去throught它再次和減速問題在別處。
這是對每個查詢的末尾
ORDER BY srchaslo
條款。我在第一篇文章中忽略了它,認爲它不相關,但它是。它在第一個查詢中工作正常,速度很快,但在另一個查詢中速度很慢。我試圖添加COLLATE語句,然後是不同的編碼,但它不起作用。然後我試圖將這個查詢包裝到SELECT * FROM(query)AS t1中,並將ORDER BY放在()之外,但這不會起作用。查詢速度如此緩慢。我沒有任何想法如何解決這個問題。
就是這樣!它完美的工作!你是如何發現它的? – Basakatu 2010-10-10 22:34:22
無論如何,感謝您的熱心幫助和時間來解決我的問題。感謝列文也。你們都很棒! – Basakatu 2010-10-10 22:36:43
我以前有過類似的問題。我很高興它爲你工作。 – Martin 2010-10-11 06:15:02