gpt4 book ai didi

c# - 使 SQL Server 中的正则表达式搜索更高效

转载 作者:太空宇宙 更新时间:2023-11-03 13:17:49 25 4
gpt4 key购买 nike

我正在尝试创建一个玩拼字游戏的机器人。因此,我将所有(270 万)个波兰词都扔到 SQL Server 数据库中,现在致力于为正则表达式查询创建模式。我刚刚发现向 WHERE 子句添加一些条件可以使搜索更加高效。

例如,执行查询:

SELECT * FROM words WHERE dbo.[like](word, '^[def]{1,3}$') = 1;

持续约 43 秒,但添加了相当明显的长度条件:

SELECT * 
FROM words
WHERE dbo.[like](word, '^[def]{1,3}$') = 1 AND LEN(word) <= 3;

将执行时间减少到 3 秒...您能告诉我为什么,并建议一些可以帮助我提高查询效率的技巧吗?

附言like函数是用c#写的CLR:

public static bool Like(string text, string pattern)
{
Match match = Regex.Match(text, pattern);

return (match.Value != String.Empty);
}

最佳答案

在 sql 中使用 clr 和 regex 很慢,您对此无能为力。我的建议是限制您需要运行的正则表达式的数量,并尝试减少您必须运行正则表达式的数据量,例如您在第二个查询中所做的那样。

“显示查询计划”窗口是您优化 sql 查询的好 helper 。

内置的 sql LIKE 运算符会更快,但当然也有更多限制。内置的 LIKE 运算符还具有有时能够使用索引的额外好处。

您可以使用 sql LIKE 将查询重写为如下内容:

SELECT *
FROM words
WHERE
word LIKE '[def][def][def]'
OR word LIKE '[def][def]'
OR word LIKE '[def]'

但它并不漂亮

您可能还会发现这个很有趣: What makes a SQL statement sargable?

关于c# - 使 SQL Server 中的正则表达式搜索更高效,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25474715/

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