sql – 删除重复的子查询
发布时间:2020-05-24 16:45:19 所属栏目:MsSql 来源:互联网
导读:我有一个复杂的SQL查询可以简化如下: Select ColA,ColB,ColC,ColDFrom MyTableWhere (ColA In (Select ItemID From Items Where ItemName like %xxx%) or ColB In (Select ItemID From Items Where ItemName like %xxx%)
|
我有一个复杂的SQL查询可以简化如下: Select ColA,ColB,ColC,ColD
From MyTable
Where (ColA In (Select ItemID From Items Where ItemName like '%xxx%')
or ColB In (Select ItemID From Items Where ItemName like '%xxx%'))
您可以看到,子查询出现两次.编译器是否足够聪明,可以检测到这一点,并且只得到子查询的结果一次?还是子查询运行两次? FYI,表项有约20,000行,MyTable有大约20万行. 是否有另一种方式来重写此SQL语句,以便子查询出现/运行一次? 更新:主查询中的Where子句是动态的,仅在需要时添加(即仅当用户搜索“xxx”时).因此,对主选择语句的更改或查询的重新构造是不可能的. 解决方法更新您的请求不更改查询,只是WHERE您可以直接将CTE打包到调用的地方(未经测试): Select ColA,ColD
From MyTable
Where EXISTS (SELECT 1 FROM (Select i.ItemID
From Items AS i
Where iItemName like '%xxx%') AS itm
WHERE itm.ItemID=MyTable.ColA OR itm.ItemID=MyTable.ColB)
以前 我认为这应该是一样的 WITH MyCTE AS
(
Select ItemID From Items Where ItemName like '%xxx%'
)
Select ColA,ColD
From MyTable
Where EXISTS (SELECT 1 FROM MyCTE WHERE ItemID=ColA OR ItemID=ColB)
一个子字符串LIKE搜索是肯定的 – 不是性能的. 如果您可以使用LIKE过滤器将“项目”减少到几行,那么您必须测试哪个是最快的. (编辑:安卓应用网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- sql-server-2008 – SQL Server 2008企业版64位可伸缩性
- sql-server – 如何找出是谁/什么是锤击SQL Server TempDB
- SQL Server sql处理数据库锁的存储过程分享
- 浅谈redis采用不同内存分配器tcmalloc和jemalloc
- 使用从数据库加载的ResourceBundle条目在JSF中进行国际化
- sql – 在查询中使用时,VARCHAR列的大小是否重要
- Mysql性能优化方案分享
- MySQL的字符集操作命令总结
- sql-server-2008-r2 – 具有SSIS包的SQL Server作业 – 无法
- 有关Sql Server 2008中的更改跟踪的建议
