2011-06-22 161 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」列表中的每個術語)並添加一些索引爲分隔列。