帮我优化以下代码:SELECT b.常用词, a.[呼叫流水号],a.文本 FROM 语料匹配清单.dbo.接触流水与文本清单 as a join [中文常用词汇].[dbo].[常用词库] as b on a.文本 like '%'+b.常用词+'%'
时间: 2023-12-14 22:39:00 浏览: 35
可以尝试使用以下代码进行优化:
```
SELECT b.常用词, a.[呼叫流水号], a.文本
FROM [语料匹配清单].[dbo].[接触流水与文本清单] AS a
INNER JOIN [中文常用词汇].[dbo].[常用词库] AS b
ON CHARINDEX(b.常用词, a.文本) > 0
```
这样可以使用 `CHARINDEX` 函数来查找匹配,而不是使用 `LIKE` 操作符。在大型数据集上,`CHARINDEX` 函数的性能可能更好。此外,我们还将使用的表和列名统一使用方括号括起来,以确保代码的可读性和兼容性。
相关问题
我需要将语料匹配清单.dbo.接触流水与文本清单与[中文常用词汇].[dbo].[常用词库]的匹配结果导入至语料匹配清单.dbo.热词匹配清单,如果语料匹配清单.dbo.热词匹配清单已有相同数据则不再插入? INSERT INTO 语料匹配清单.dbo.热词匹配清单([常用词],[呼叫流水号],[文本],[工号],[班组],[接触方式],[呼叫日期],[24小时内重复拨打次数(集团)],[呼叫时长],[满意度评价]) SELECT top (100) b.常用词,a.[呼叫流水号],a.文本,a.工号,a.班组,a.接触方式,a.呼叫日期,a.[24小时内重复拨打次数(集团)],a.呼叫时长,a.满意度评价 FROM 语料匹配清单.dbo.接触流水与文本清单 as a join [中文常用词汇].[dbo].[常用词库] as b on a.文本 like '%'+b.常用词+'%'
你可以使用以下 SQL 语句将匹配结果导入至热词匹配清单。其中,使用了 NOT EXISTS 子查询来判断是否已有相同数据。
```sql
INSERT INTO 语料匹配清单.dbo.热词匹配清单([常用词],[呼叫流水号],[文本],[工号],[班组],[接触方式],[呼叫日期],[24小时内重复拨打次数(集团)],[呼叫时长],[满意度评价])
SELECT TOP (100) b.常用词, a.[呼叫流水号], a.文本, a.工号, a.班组, a.接触方式, a.呼叫日期, a.[24小时内重复拨打次数(集团)], a.呼叫时长, a.满意度评价
FROM 语料匹配清单.dbo.接触流水与文本清单 AS a
JOIN [中文常用词汇].[dbo].[常用词库] AS b ON a.文本 LIKE '%' + b.常用词 + '%'
WHERE NOT EXISTS (
SELECT 1
FROM 语料匹配清单.dbo.热词匹配清单
WHERE 常用词 = b.常用词
AND 呼叫流水号 = a.[呼叫流水号]
AND 文本 = a.文本
AND 工号 = a.工号
AND 班组 = a.班组
AND 接触方式 = a.接触方式
AND 呼叫日期 = a.呼叫日期
AND [24小时内重复拨打次数(集团)] = a.[24小时内重复拨打次数(集团)]
AND 呼叫时长 = a.呼叫时长
AND 满意度评价 = a.满意度评价
)
```
帮我优化以下代码:select a.满意话务量,b.不满意话务量 from (SELECT sum(count([呼叫流水号])) as 不满意话务量,工号,班组 FROM [语料匹配清单].[dbo].[接触流水与文本清单] where [满意度评价] like '%不满意%' and [满意度评价] is not null group by 工号,班组) as b join (SELECT sum(count([呼叫流水号])) as 满意话务量,工号,班组 FROM [语料匹配清单].[dbo].[接触流水与文本清单] where [满意度评价] not like '%不满意%' and [满意度评价] is not null group by 工号,班组 ) as a on (a.[工号]= b.工号) and (a.班组=b.班组)
可以尝试以下优化:
1. 使用 WITH 子句,将两个子查询中重复的部分抽离出来,避免重复查询。
2. 将 WHERE 子句中的两个条件合并成一个条件,使查询更加简洁。
3. 删除不必要的中括号和冗余的别名。
优化后的代码如下:
```
WITH temp AS (
SELECT sum(count(呼叫流水号)) AS 话务量, 工号, 班组, 满意度评价
FROM [语料匹配清单].[dbo].[接触流水与文本清单]
WHERE 满意度评价 IS NOT NULL
GROUP BY 工号, 班组, 满意度评价
)
SELECT a.话务量 AS 满意话务量, b.话务量 AS 不满意话务量
FROM temp AS a
JOIN temp AS b ON a.工号 = b.工号 AND a.班组 = b.班组
WHERE a.满意度评价 NOT LIKE '%不满意%' AND b.满意度评价 LIKE '%不满意%';
```