gpt4 book ai didi

sql-server - SQL 中的字符匹配查询

转载 作者:行者123 更新时间:2023-12-03 09:54:59 28 4
gpt4 key购买 nike

我正在尝试优化我拥有的 T-SQL 存储过程。它用于根据 VIN(一个 17 个字符的字母数字字符串)提取记录;通常人们只知道几个数字——例如第一个数字可以是“1”、“2”或“J”;第二个是“H”,但第三个可能是“M”或“G”;等等。

这会导致一个非常复杂的查询,其 WHERE 子句类似于

WHERE SUBSTRING(VIN,1,1) IN ('J','1','2')
AND SUBSTRING(VIN,2,1) IN ('H')
AND SUBSTRING(VIN,3,1) IN ('M','G')
AND SUBSTRING(VIN,4,1) IN ('E')
AND ... -- and so on for however many digits we need to search on

我要查询的表很大(数百万条记录)所以我正在运行的具有这种WHERE 子句的查询可以采用如果要搜索的数字超过几位,则运行数小时,即使我只请求前 3000 条记录。我觉得必须有一种方法可以让这个子串字符匹配运行得更快。时间是完全不能接受的;我希望在几分钟内运行这些类型的查询。

遗憾的是,我对数据库没有任何编辑权限,所以我不能添加索引或类似的东西;我所能做的就是更改我的存储过程(尽管我可以尝试恳求 DBA 修改表)。

最佳答案

你可以使用

WHERE VIN LIKE '[J12]H[MG]E%'

至少这应该有望导致在范围 JH% 上进行 3 次索引查找。 , 1H% , 和 2H%而不是全面扫描。

编辑 虽然在本地进行测试,但我发现它并没有像我希望的那样进行多重索引查找,因为它将上面的内容转换为更大范围内的单一查找 VIN >= '1' and VIN < 'K'使用剩余谓词来评估 LIKE

我不确定它是否会为更大的表执行此操作,但否则可能值得尝试通过

来鼓励此计划
WHERE (VIN LIKE 'JH%' OR  VIN LIKE '1H%' OR  VIN LIKE '2H%') 
AND VIN LIKE '[J12]H[MG]E%'

关于sql-server - SQL 中的字符匹配查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5981989/

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