位置: 编程技术 - 正文

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怎么修改默认实例名)

  • 车辆出现质量问题
  • 买材料通过公司走账合法吗
  • 建筑劳务公司的工资计入什么科目
  • 实收资本一直挂着其他应收款怎么办
  • 商业汇票到期没有收到款
  • 车船税不交怎么办
  • 当月有进项无销项月末怎么处理
  • 车船税每年都要交吗标准多少
  • 无货源发货如何填写物流单
  • 向境外支付特许权使用费免征增值税
  • 增值税发票验证
  • 管理费用多计提了怎么冲
  • 推广和业务
  • 分包挂靠认定依据
  • 工程项目分包需要缴纳企业所得税吗
  • 开淘宝注册公司需要什么
  • 房屋装修费用计算器
  • 成本差异的种类有哪些?
  • 一般企业车辆日期怎么算
  • 远程怎么控制电脑
  • Win7系统中如何快速查询文件内容
  • 在win7系统中如何让电脑恢复出厂设置方法
  • 企业的营业外收入要交增值税吗
  • php中substr_replace
  • 未分配利润转增股本交印花税
  • 公网访问内网主机
  • 用应付票据付应付账款
  • 企业代扣代缴个人所得税会计分录
  • Glastonbury Tor, Somerset, England (© DEEPOL by plainpicture/Adam Burton)
  • 房地产企业借款可以用未建成的房子设定浮动抵押吗?
  • vue 使用js
  • 静态显示方式
  • 缴纳水利建设基金计入什么科目
  • 预缴土地增值税的税率
  • 应收票据确认坏账怎么处理
  • CV攻城狮入门VIT(vision transformer)之旅——VIT原理详解篇
  • yolov5增加检测层
  • php_curl.dll
  • wordpress mobile themes
  • 印花税申报成功后在哪缴税
  • 固定资产转为投资性房地产公允价值
  • 出纳造工资表吗
  • 前置测试模型
  • java接口基础知识
  • PostgreSQL中使用dblink实现跨库查询的方法
  • 有限责任公司分类
  • 商业保险 抵扣个税
  • 银行会计核算方法的特点
  • 电子承兑被退回要重新背书怎么办
  • 哪些收入需要交消费税
  • ukey要交服务费吗
  • 公司注销时财务报表要注意什么
  • 定额发票是否可以盖公章
  • 增值税进项税额转出的情况有哪些
  • 企业商业汇票到期款项存入银行
  • 金税盘离线开票时间超限的处理方法
  • 接受捐赠收入如何计入收入
  • 公司财务人员的作用
  • sql server启动不了 错误2
  • Python3.6-MySql中插入文件路径,丢失反斜杠的解决方法
  • server core安装完成后按什么进行登录
  • Fedora 13 Final DVD ISO系统下载
  • 没有光驱有什么影响
  • win10安装win7主题
  • 批处理文件.bat
  • 图形学题目
  • androidstudiosdk
  • Unity 相关经典博客资源总结(持续更新)
  • js字符串的操作方法
  • Android Http请求方法汇总
  • unity3d控制物体移动
  • js图形界面
  • 浏览器窗口上线怎么办
  • 快速掌握英语的方法
  • 陕西税务管网
  • 企业所得税报错了税款扣了可以改吗
  • 公寓土地增值税30%-60%阶梯税
  • 纳税服务的背景是什么
  • 江苏联通客服电话人工服务号码
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设