位置: 编程技术 - 正文

LINQ to SQL:处理char(1)字段的方式会引起全表扫描问题(sql clean)

编辑:rootadmin

如果表中的字段类型为 char(1) 时,Linq to SQL生成char (System.Char)的属性,如下图

表定义生成的实体

2.

如果要查询LineCode=='A'的记录,可以这样定义Linq查询语句

var test1 = from p in db.ProductLines where p.LineCode =='A' select p;

生成的SQL语句是这样的

SELECT [t0].[LineCode], [t0].[LineName], [t0].[JPH], [t0].[QueueCount]FROM [dbo].[ProductLine] AS [t0]WHERE UNICODE([t0].[LineCode]) = @p0-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) []-- Context: SqlProvider(Sql) Model: AttributedMetaModel Build: 3.5..8

注意到Where语句了吗?是WHERE UNICODE([t0].[LineCode]) = ,这里先取LineCode列内容的UNICODE再和'A'的UNICODE比较。我们知道'A'和'a'的UNICODE是不同的。UNICODE('A') =,UNICODE('a')=,也就是说,我们在Linq to SQL中这二个查询的结果是不一样的。

Linq 语句var test1 = from p in db.ProductLines where p.LineCode =='a' select p;var test1 = from p in db.ProductLines where p.LineCode =='A' select p;生成SQL语句SELECT [t0].[LineCode], [t0].[LineName], [t0].[JPH], [t0].[QueueCount]FROM [dbo].[ProductLine] AS [t0]WHERE UNICODE([t0].[LineCode]) = @p0-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) []SELECT [t0].[LineCode], [t0].[LineName], [t0].[JPH], [t0].[QueueCount]FROM [dbo].[ProductLine] AS [t0]WHERE UNICODE([t0].[LineCode]) = @p0-- @p0: Input Int (Size = 0; Prec = 0; Scale = 0) []

明显,在Linq to sql是查询char(1)类型字段是区分大小写的。

这还会导致一个比较严重的问题,我们知道在SQL Server中,任何在运算符左边的操作都会使SQL采用全表扫描。也就是说,Linq的这个查询,会引起全表扫描,即使[LineCode]列上定义了聚合索引。而如果是where [linecode]='A',则可以使用索引。我们看下这二种情况时的查询执行计划对比。

图中可以看出,Linq to SQL 生成的SQL语句是表扫描,而后者则是索引查找。

3.

对策

在DBML设计器中将LineCode改成string类型。

看一下改了之后的查询

var test1 = from p in db.ProductLines where p.LineCode == "a" select p;SELECT [t0].[LineCode], [t0].[LineName], [t0].[JPH], [t0].[QueueCount]FROM [dbo].[ProductLine] AS [t0]WHERE [t0].[LineCode] = @p0-- @p0: Input VarChar (Size = 1; Prec = 0; Scale = 0) [a]-- Context: SqlProvider(Sql) Model: AttributedMetaModel Build: 3.5..8Linqsql

改为string后,生成的SQL不再用UNICODE函数了,就解决了区分大小写和引起全表扫描的问题。但又引起一个新的问题,因为数据库中存储的数据长度是1,在Insert和Update时就要注意,LineCode不要输入过长的内容,否则会出错了。

推荐整理分享LINQ to SQL:处理char(1)字段的方式会引起全表扫描问题(sql clean),希望有所帮助,仅作参考,欢迎阅读内容。

LINQ to SQL:处理char(1)字段的方式会引起全表扫描问题(sql clean)

文章相关热门搜索词:sqlallochandle on sql_handle,sql clean,sqlallochandle on sql_handle,sqlallochandle on sql_handle,linq到sql是对什么进行操作,sql following,sqlallochandle on sql_handle,linq到sql是对什么进行操作,内容如对您有帮助,希望把文章链接给更多的朋友!

SQL中改名和删除默认sa帐号的最安全方法 这个sa一般情况下是既不可以更改名称,也不可以删除,呵呵,有点鸡肋的味道,弃置可惜,食之无味。在偶装上sql之后,感觉总之怪怪的,放着这

mssql SA帐号的改名和删除 呵呵,前面说拉那么半天废话,可能你已经看的不耐烦拉,好,这就说道正题,大家跟着我来一起把sa给大卸八块首先打开SQL中的企业管理器,接着在工

SQLServer中master数据库分析 表sysdatabases:保存DBMS中数据库信息select[name]from[sysdatabases]orderby[name]就能得到该DBMS中的数据库信息表sysobjects:保存数据库中数据表信息con.ChangeDatabase(DBN

标签: sql clean

本文链接地址:https://www.jiuchutong.com/biancheng/348450.html 转载请保留说明!

上一篇:一条语句简单解决“每个Y的最新X”的经典sql语句(一条的句子怎么写)

下一篇:SQL2000中改名和删除默认sa帐号的最安全方法(sql2000怎么修改默认实例名)

  • 计入职工福利费的有哪些
  • 附加税减半征收的条件
  • 办公室水电费计算公式
  • 减免增值税款怎么算
  • 在建工程转固定资产需要什么附件
  • 应付账款坏账准备的会计分录
  • 出租固定资产取得的租金收入属于什么收入
  • 开发成本月末如何处理
  • 加油站固定资产折旧年限
  • 固定性制造费用成本差异是
  • 人力资源劳务费发票税率
  • 企业安全生产费用提取标准 最新
  • 周转材料摊销属于什么费用
  • 公司变卖后员工怎么办
  • 集团财务公司可以放款给外部单位吗
  • 旧设备变现损失抵减所得税怎么算
  • 董事费条款
  • 账本印花税税金及附加怎么入账?
  • 减免附加税还要计提吗
  • 学校有税号可以收专票吗
  • 基金会可以投资企业吗
  • 固定资产转固流程图
  • 收到汽车保险赔款怎么做账
  • 房地产开发企业预收款预缴增值税
  • win10 kb5005611
  • win11虚拟键盘怎么调出来
  • 负债率是什么指标
  • 无形资产入股注意事项
  • 计算机存储信息的基本单位是( )A字长B速度C内存D字节
  • php的认识
  • DxDebugService.exe是什么进程 DxDebugService进程安全吗
  • 包装物损坏无法确认
  • 委托加工物资加工费计入
  • PQV2ISECURITY.EXE - PQV2ISECURITY是什么进程 有什么用
  • 印花税怎么核算的
  • 增值税三流合一涉及子公司
  • js怎么把时间戳转为日期yyyy-mm-dd
  • 维多利亚瀑布有多高?多宽?
  • 政府给的土地补偿标准
  • 前端跨域解决方案设计
  • 专家坐诊信息
  • 税控盘开具增值税专用发票步骤
  • dos命令暂停停10s
  • ldconfig命令怎么用
  • ps使用背景橡皮擦的时候需要按住什么键
  • zabbix 网络监控
  • 银行利息怎么算10万块三年多少利息
  • 阶段性减免企业社保费实施政策对象
  • 售后回租服务费开票
  • 预收账款和预付账款怎么理解
  • 转让股权需要缴纳哪些税
  • 房屋租赁的注意问题
  • 物流公司账务处理流程及方法
  • 提取坏账会计分录怎么写
  • 收据可不可以做账
  • 新准则会计科目解释
  • sql server中删除触发器用
  • MySQL replace into 语句浅析(一)
  • SQL Server中通配符的使用示例
  • mysql三层架构
  • 搜狗网络
  • centos安装dig
  • win10蓝屏出现错误
  • centos6.8修改主机名
  • win7电脑键盘失灵怎么解决
  • win10重置系统快捷键
  • 安装samba服务器步骤
  • win7旗舰版完整版下载
  • 修改注册表命令
  • nodejs实战教程
  • 有关javascript的书
  • JavaScript中的变量名不区分大小写
  • jquery怎么修改样式
  • python3连接pg执行命令
  • 河北市国家税务局官网
  • 国家税务总局61号
  • 运输费用抵扣税率最新规定
  • 曲靖市税务局领导班子
  • 青岛的红叶什么时候红
  • 代销手续费增值税会计处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设