2012-08-31 179 views
3

我有2个表:MySQL的左连接优化

  • formfill有列idmessagevaluenamefield
  • fields具有列namefield,typefield,optionsfield

我没有任何主键。关系在名称栏之间。

我的查询是:

select e.namefield,e.typefield,e.optionsfield,b.value,b.id 
from fields as e 
left join formfill as b on e.namefield = b.namefield and b.id=1011 

这个查询就可以了。但它运行非常缓慢(约10秒)。我怎样才能让它更快?

+0

你已经添加了必要的索引到表? – defuz

+0

您需要添加索引。你可以发布'EXPLAIN SELECT e.namefield ...'的结果吗? – Kermit

+1

这个查询在做什么?在第二张桌子上看到一个左外连接有限制是有点不寻常的。通常,当选择一个id时,你需要这个id。但是这个查询更一般。你真的认为是一个正确的外部连接吗? –

回答

1

你或许应该用

http://dev.mysql.com/doc/refman/5.0/en/explain.html

但发表您的查询计划查询执行的低速migh意味着

  • 你没有索引,引擎必须做全扫描,所以最好在有''等操作的字段上添加索引。索引的类型可以是“散列”如果您使用=或<>和B树用于操作等<或>

  • 在右表中的行的数目大于一在左边的表中的10幅值和更多,所以索引将没有多大帮助,你将需要考虑分区数据