gpt4 book ai didi

仅使用通配符 (%) 作为值的 SQL LIKE 性能

转载 作者:行者123 更新时间:2023-12-02 09:02:06 25 4
gpt4 key购买 nike

我想知道与根本不使用 where 子句相比,使用 LIKE 关键字和通配符作为值的查询性能如何。

考虑一个 where 子句,例如“WHERE a LIKE '%'”。这将匹配列“a”的所有可能值。这与根本没有 where 子句相比如何。

我问这个问题的原因是我有一个应用程序,其中有一些字段用户可以指定要搜索的值。在某些情况下,用户想要所有可能的结果。我目前正在使用这样的单个查询:

SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?

可以提供“%”和“%”的值来匹配 a 和或 b 的所有可能值。这很方便,因为我可以在我的应用程序中使用单个命名查询来实现此目的。我想知道这样做的性能考虑因素是什么。查询优化器是否会减少 LIKE '%' 以简单地匹配所有内容?我意识到,因为我使用的是命名查询(准备好的语句),这也可能会影响答案。我意识到答案可能是特定于数据库的。具体来说,这在 Oracle、MS SQL Server 和 Derby 中如何工作。

另一种方法是根据用户输入通配符使用 3 个单独的查询。

A 是通配符查询:

SELECT * FROM TableName WHERE b LIKE ?

B是通配符查询:

SELECT * FROM TableName WHERE a LIKE ?

A 和 B 是通配符:

SELECT * FROM TableName

没有通配符:

SELECT * FROM TableName WHERE a LIKE ? AND b LIKE ?

显然,单个查询是最简单且最容易维护的。如果性能仍然良好,我宁愿只使用一个查询。

最佳答案

SQL Server 一般都会看到

WHERE City LIKE 'A%'

并将其视为

WHERE City >= 'A' AND City < 'B'

...并在适当的情况下愉快地使用索引查找。我说“一般”,因为我发现它在某些情况下无法进行这种简化。

如果有人尝试这样做:

WHERE City LIKE '%ville'

...那么索引查找基本上是不可能的。

但是很简单:

WHERE City LIKE '%'

将被视为等同于:

WHERE City IS NOT NULL

关于仅使用通配符 (%) 作为值的 SQL LIKE 性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1604707/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com