我有一个select子句,它有一个where子句:WHERE CONCAT(att.subjectId,'#',att.classId)IN('132#100')。我在subjectId和classId上添加了一个复合索引,但这些索引对于这样的动态列是否有用。如果没有,可以在动态列上创建一个列,如CONCAT(att.subjectId,'#',att.classId)。
答案 0 :(得分:1)
最好我知道MySQL无法在表达式/函数结果上创建索引。
解决方法是使用触发器填充额外字段并对其进行索引。
答案 1 :(得分:0)
可能,函数不是“where”子句的最佳选择,它们强制dbms执行“全扫描”,这会导致性能下降。
我认为最好使用少数“(att.subjectId ='132'和att.classId ='100')”与“OR”连接(对于“IN”列表中的每个术语)并添加一些索引分隔列。