【发布时间】:2014-01-12 21:39:58
【问题描述】:
我可以使用我在下面编写的查询来获取必要的结果。可悲的是,这需要我通过一个带有子查询的巨大表,每次执行查询都需要 10 秒以上。有没有更有效的方法来做到这一点?
SELECT * FROM CATEGORIES
WHERE ID IN (SELECT DISTINCT replace( CATEGORY, '-', '' )
FROM `LISTINGS`) LIMIT 0 , 30
注意:类别值在表 LISTINGS 中写为“-1-”,其中 1 是类别 ID。
【问题讨论】:
-
您可以尝试使用
where '-'+ID+'-' in (select distinct category ..之类的内容来消除替换 - 我的语法可能有误,您可能需要将 ID 转换为 varchar 才能做到这一点。看起来无论如何您都必须扫描该表。 -
类别经常变化吗?如果没有,只需将类别 ID 保存在 memcache 中并使用 ID 进行查询。甚至将整个类别对象保存在 memcache 中。在典型用法中,在为最终用户提供服务时,不应有理由从数据库中获取类别。
标签: mysql sql performance subquery