sqlserver 关联查询 charindex 函数 查询慢,不使用索引问题解决办法

问题:

  两张表 数据都非常多

A表中A1字段 需要关联B表主键 查询

A1 字段 存储多个B表主键

  格式为:

    格式1:b1,b2,b3

    格式2:b4

    格式3:b5,b6

逗号分隔的占少数

这样就导致在做关联查询时,必须使用 like ‘%...%‘,  charindex ,又或者replace(A1,b1,‘‘) <> A1 等手段,而在SqlServer中使用这些方法来查询,会触发全表检索,导致字段对应的索引失效,效率极低;

解决方案:

  前提:在逗号分隔的数据 与 直接关联的数据量有差异的情况下,如 总共100条数据,其中99 条都是A1 直接存储B表主键,有一条存储了多个B表主键,并用逗号分隔

  那么可以 采用分开查询,单个存储于多个存储值 的记录分开查询结果用 union 关键字做合并 如:

  

select AA.* from A AA
  where exists(
    select A.pk from A,B where A.A1 like ‘%,%‘ and charindex(B.pk,A.A1) > 0 and AA.pk = A.pk
    union all
    select A.pk from A,B where A.A1 =B.pk and AA.pk = A.pk
  )

其实就是根据数据量大小 将 需要使用全表检索的数据分开,而不影响其他不需要全表检索的数据查询速度,从而解决查询卡顿的问题

  

  

  

时间: 2024-11-08 19:03:02

sqlserver 关联查询 charindex 函数 查询慢,不使用索引问题解决办法的相关文章

MYSQL查询--聚合函数查询

聚合函数查询 聚合函数的最大特点是它们根据一组数据求出一个值.聚合函数的结果值只根据选定行中非NULL的值进行计算,NULL值被忽略. COUNT()函数 COUNT()函数,对于除"*"以外的任何参数,返回所选择集合中非NULL值的行的数目:对于参数"*",返回选择集合中所有行的数目,包含NULL值的行.没有WHERE子句的COUNT(*)是经过内部优化的,能够快速的返回表中所有的记录总数. 例子: select COUNT(*) from info; 查询结果:

关系数据库SQL之基本数据查询:子查询、分组查询、模糊查询

http://www.jianshu.com/p/eeb6a898d4ec 前言 上一篇关系数据库常用SQL语句语法大全主要是关系型数据库大体结构,本文细说一下关系型数据库查询的SQL语法. SQL数据查询 语法回顾 SELECT [ALL|DISTINCT] <目标列表达式>[,<目标列表达式>]- FROM <表名或视图名>[,<表名或视图名>]- [WHERE <条件表达式>] [GROUP BY <列名> [HAVING &l

18 12 06 sql 的 基本语句 查询 条件查询 逻辑运算符 模糊查询 范围查询 排序 聚合函数 分组 分页 连接查询 自关联 子查询

-- 数据的准备 -- 创建一个数据库 create database python_test charset=utf8; -- 使用一个数据库 use python_test; -- 显示使用的当前数据是哪个? select database(); -- 创建一个数据表 -- students表 create table students( id int unsigned primary key auto_increment not null, name varchar(20) default

mysql-Invalid use of group function-聚合函数不能直接使用在where后面-使用exists,外查询与子查询应条件关联

1.创建表和插入数据 CREATE TABLE `tb_test_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `dept_id` int(11) NULL DEFAULT NULL, `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `score` int(11) NULL DEFAULT NULL, PRIMARY KEY (`id`)

【SqlServer系列】表单查询

系列关联文章 此系列文章归属于:ASP.NET MVC+Bootstrap+JQuery+SqlServer,其他几篇文章请参照如下: 详解google Chrome浏览器(理论篇) 详解Google Chrome浏览器(操作篇)(上) 详解Google Chrome浏览器(操作篇)(下) .NET 开发环境搭建 详解ASP.NET MVC 路由 详解ASP.NET MVC 控制器 详解Jquery 选择器 ASP.NET 程序发布详细过程 接下来的文章系列会在如上范围跳动. 1   概述 如下

SQLServer学习笔记&lt;&gt;相关子查询及复杂查询

二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,count(*) as N'每日订单量' from sales.orders 2 where orderdate between '20080101' and '20081231' 3 group by orderdate 查询结果如图: 从上面可以看出来,每天的订单的数量根据orderdate分组以后统计

SQL语句汇总(三)——聚合函数、分组、子查询及组合查询 - Darly

–COUNT:统计行数量 –SUM:获取单个列的合计值 –AVG:计算某个列的平均值 –MAX:计算列的最大值 –MIN:计算列的最小值 首先,创建数据表如下: 执行列.行计数(count): 标准格式 SELECT COUNT(<计数规范>) FROM <表名> 其中,计数规范包括: - * :计数所有选择的行,包括NULL值: - ALL 列名:计数指定列的所有非空值行,如果不写,默认为ALL: - DISTINCT 列名:计数指定列的唯一非空值行. 例,计算班里共有多少学生:

Oracle树查询及函数

Oracle树查询的最重要的就是select...start with... connect by...prior语法了.依托于该语法,我们可以将一个表形结构的中以树的顺序列出来.在下面列述了Oracle中树型查询的常用查询方式以及经常使用的与树查询相关的Oracle特性函数等,在这里只涉及到一张表中的树查询方式而不涉及多表中的关联等. 以我做过的一个项目中的表为例,表结构如下: Sql代码   CREATE TABLE FLFL ( ID      NUMBER                

『TensorFlow』函数查询列表_神经网络相关

神经网络(Neural Network) 激活函数(Activation Functions) 操作 描述 tf.nn.relu(features, name=None) 整流函数:max(features, 0) tf.nn.relu6(features, name=None) 以6为阈值的整流函数:min(max(features, 0), 6) tf.nn.elu(features, name=None) elu函数,exp(features) - 1 if < 0,否则featuresE