gpt4 book ai didi

sql - 提高 "reverse"LIKE 查询的性能

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

我有一个与此类似的查询:

SELECT  CustomerId
FROM Customer cust
WHERE 'SoseJost75G' LIKE cust.ClientCustomerId + '%' -- ClientCustomerId is SoseJost

其作用的要点是,我从客户处获得一个值,即我的 ClientCustomerId,但末尾附加了未知数量的额外字符。

因此,在我的示例中,客户给了我 SoseJost75G,但我的数据库只有 SoseJost(末尾没有 75G。)

我的查询有效。但运行需要一分多钟。这是因为它无法使用 ClientCustomerId 上的索引。

有人知道提高此类查询性能的方法吗?

最佳答案

你可以尝试这样的事情:

DECLARE @var VARCHAR(100)='SoseJost75G';

WITH pre_selected AS
(SELECT * FROM Customer WHERE ClientCustomerId LIKE LEFT(@var,6) + '%')
SELECT *
FROM pre_selected WHERE @var LIKE ClientCustomerId +'%';

通过 LIKE 并修复开始 - 将使用 ClientCustomerId 上的现有索引进行搜索。

使用 CTE,您永远不知道确切的执行顺序,但是 - 在一些快速测试中 - 优化器选择首先将集合减少到一个微小的休息,然后执行繁重的搜索作为第二步。

如果执行顺序不是您期望的方式,您可以将第一个 CTE 查询的结果插入到声明的变量中(仅具有 ID 的列),然后继续使用这个小表...

类似这样的事情

DECLARE @var VARCHAR(100)='SoseJost75G';

DECLARE @CustIDs TABLE(ClientCustomerID VARCHAR(100));
INSERT INTO @CustIDs(ClientCustomerID)
SELECT ClientCustomerID FROM Customer WHERE ClientCustomerId LIKE LEFT(@var,6) + '%';

--Use this with an IN-clause then
SELECT ClientCustomerId
FROM @CustIDs WHERE @var LIKE ClientCustomerID +'%'

关于sql - 提高 "reverse"LIKE 查询的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39757438/

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