位置: 编程技术 - 正文

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

  • 佣金交税吗
  • 递延所得税什么时候确认
  • 船舶吨税范围
  • 股权分配利润应该怎么做账
  • 股东投入款
  • 个体工商户网上注销
  • 中标服务费计入什么会计科目
  • 其他债权投资减值准备影响账面价值吗
  • 给员工发开门红包的通知
  • 贸易公司成本核算不准确的后果
  • 服装厂委托物资零散加工成品如何做账呢?
  • 企业住房维修基金怎么交
  • 企业购买的衣服会计分录
  • 电子产品发票税是多少
  • 企业税审要钱吗
  • 免税企业可以开具有税率的增值税专用发票吗
  • 购买防疫物资计划
  • 个税少报有什么后果
  • 制造费用分配的的标准是什么?
  • 个人银行卡流水达到多少要交税
  • 汇算清缴时交的税怎么算
  • 其他综合收益会计科目编码
  • bois如何设置启动项
  • win10回退到以前版本失败
  • 月底财务为什么要关账,暂时开不了发票
  • 会计中记账凭证复核是谁负责
  • 怎么激活对话框取消
  • 库乐队是苹果自带的嘛
  • PHP:curl_errno()的用法_cURL函数
  • 深度学习模型精度fp16和fp32
  • PHP:pg_lo_read_all()的用法_PostgreSQL函数
  • vue 大屏可视化设计 开源
  • yolov5 c
  • 购进的货物
  • php获取表单数据保存到mysql中
  • php 集成环境
  • javascript控制语句
  • 汽车增值税是
  • 小微企业免税额怎么计算
  • 网络课平台用交税吗
  • 报销备用金的摘要
  • 汇算清缴账务
  • 织梦栏目页模板
  • php变量名称中可以包含哪些元素
  • 虚开发票是指怎样?
  • 经营租入的设备属于什么会计要素
  • 一般纳税人和小规模纳税人的区别
  • SQL2005Express中导入ACCESS数据库的两种方法
  • 库存现金月末是怎么样结账的
  • 股权质押和股权抵押有什么区别
  • 委托生产的会计分录
  • 月末制造费用转入生产成本
  • 扣缴个人所得税申报表模板
  • 研发加计扣除抵减税额怎么算
  • 施工单位食堂管理要求
  • 企业计提福利费按多少提
  • 建账的内容一般包括什么
  • supervisor.sock refused connection
  • sql server复制功能
  • mac电脑双系统
  • 电脑windows怎么查
  • win8网络连接
  • Usrshuta.exe - Usrshuta是什么进程
  • adb.exe是什么程序
  • 如何隐藏windows激活水印
  • imac 2010 cpu
  • windows10计划任务文件在哪
  • centos7.6有线连接
  • 网页中经常用到的代码
  • 遮罩有什么作用
  • nodejs集成sqlite使用示例
  • 细说javascript
  • jqury选择器
  • 工具类软件有哪些
  • jquery通过属性值获取元素
  • 全国国税税务机关是哪里
  • 辽宁省大连市国家运动员
  • 1月纳税申报截止时间
  • 网上预约税务局怎么弄
  • 地税企业所得税是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设