【发布时间】:2009-10-20 15:55:11
【问题描述】:
我有一个可以简化为的 SQL:
SELECT *
FROM table
WHERE LOCATE( column, :keyword ) > 0
ORDER BY LOCATE( column, :keyword )
您可以看到“LOCATE(column, :keyword)”的副本。有没有办法只计算一次?
【问题讨论】:
-
另外,如果您不知道,许多数据库允许您为函数或计算创建索引。因此,如果您发现自己基于 LOCATE(column,:keyword) 进行了大量查询,您可以创建一个索引,其中该值已预先计算和存储,以提高查询速度。
-
你确定 LOCATE 被调用了两次吗?
-
tster 是正确的 - 许多 sql 引擎会优化它。
-
我的目的不仅仅是为了节省计算,还要让SQL清晰。因为上面的例子是一个简化的例子,所以在我的例子中,实际的 SQL 可能很容易达到 6 整行。
标签: sql mysql query-optimization