我的查询试图加入3个表时遇到一个奇怪的问题。表格描述了:
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%"
工作不好 - 结果没问题,但查询需要大约2.2才能执行,我不知道为什么。我查看了EXPLAIN,但我发现唯一的问题是第二个查询,即慢速查询,是“使用临时”。我不知道为什么。我确信有一些我看不见的东西,也许还有一种简化这些查询的方法。
请提前帮助和非常感谢, 最好的问候,
卡米尔
=======
我非常抱歉 - 我再次经历了这个问题,而减速问题则在其他地方。
这是
ORDER BY srchaslo
每个查询结束时的子句。我在第一篇文章中提出这个问题,认为它不相关,但确实如此。它在第一个查询中运行良好且快速,但在另一个查询上速度非常慢。我尝试添加COLLATE语句,然后添加不同的编码,但它不起作用。然后我尝试将此查询包装到SELECT * FROM(查询)AS t1中并将ORDER BY抛出(),但这不会起作用。查询和它一样慢。我没有任何想法如何解决这个问题。
答案 0 :(得分:2)
你需要一个关于rel_pl_es的额外索引:
create index idx2 on rel_pl_es( espid,polid);
对于第二个查询,现有索引不起作用。