2011-06-22 118 views
1

我有一个select语句,它具有where子句:WHERE CONCAT(att.subjectId,'#',att.classId)IN('132#100')。我已经在subjectId和classId上添加了一个复合索引,但这些索引是否适用于这种动态列。如果不是,可以在像CONCAT这样的动态列上创建一个列(att.subjectId,'#',att.classId)。将索引添加到mysql动态列

+0

总之:不,你不能。 –

回答

1

最好的我知道MySQL没有提供在表达式/函数结果上创建索引的方法。

解决的办法是使用触发器填充额外的字段并对其进行索引。

+0

非常感谢Denis ..你能否给我看一下你的解决方法。 – Abhiraj

0

也许,函数并不是“where”子句的最佳主意,它们会强制dbms执行“全面扫描”来杀死性能。

我认为最好使用少数“(att.subjectId ='132'和att.classId ='100')”与“OR”连接(对于“IN”列表中的每个术语)并添加一些索引为分隔列。