【发布时间】:2015-09-23 13:23:31
【问题描述】:
我保留了许多与工作相关的 SQL 便利脚本。 有一段时间我一直在使用一个约定 我可以激活的 where 语句中的几个 AND 子句 通过提供一个或多个值进行搜索。例如,
where color like '%&color' and size like '%&size'
当我在首选客户端 (Golden6) 中运行此类 SQL 时,它会弹出 一个对话框,我可以在其中提供颜色、大小或两者的值。 很方便,但是 LIKE '%string' 的表现往往 很糟糕,通常会导致全表扫描,或者我已经读过。
是否有一些替代技术来编写和管理这些 保持能够仅填写的便利的脚本 我想使用的参数,但避免了 LIKE '%string' 周围的性能问题?我不想每次使用时都编辑脚本, 因为我将它们保存在 git 中,并且我不想总是管理一堆本地修改的文件来整理。
【问题讨论】:
-
好吧,我想问题是,你真的需要
LIKE吗?您是在搜索您知道存在的确切值,还是您真的想要与您搜索的值相似的任何东西?如果你真的需要使用LIKE '%...',那么全表扫描是不可避免的(它会因为前导通配符而进行全表扫描,这使得索引无法使用)。 -
我使用 LIKE 只是作为一种技巧,所以如果我(例如)不提供颜色值,而只提供大小,那么空颜色子句不会阻止任何事情从匹配 where 条件。
-
您可以随时将
AND更改为OR来解决此问题,而不是使用LIKE -
请参阅this post 了解您可以尝试的方法。