我正在使用带有 LEFT 函数的 INNER JOIN 和 WHERE 来匹配记录的前 8 个字符。
INSERT INTO result SELECT id FROM tableA a
INNER JOIN tableB b ON a.zip=b.zip
WHERE LEFT(a.street,8)=LEFT(b.street,8)
a.street
和 b.street
都被索引了(部分索引 8)。
查询未在超过 24 小时内完成。我想知道索引是否有问题,或者是否有更有效的方法来执行此任务
最佳答案
Mysql 不会为应用了函数的列使用索引。
其他数据库确实允许基于函数的索引。
您可以创建一个仅包含 a.street 和 b.street 的前 8 个字符的列并为它们建立索引,事情会更快。
关于mysql - 使用 LEFT() 函数的查询性能不佳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22105364/