位置: 编程技术 - 正文

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为什么还有人用
  • 经销商计提折扣怎么算
  • 结转损益和结转成本
  • 出口货物视同内销征税的会计核算
  • 国家差旅费报销最新标准住宿
  • PHP:imageantialias()的用法_GD库图像处理函数
  • thinkphp教程
  • thinkphp框架介绍
  • 借银行卡给别人过账有什么风险
  • 报废的设备怎么处理
  • 税票报税怎么弄
  • vue 配置
  • 评价类模型topsis
  • gpt3 plug
  • 资本金什么时候可以退回
  • 购进原材料款项未付应编制什么凭证
  • 保教费收入要交企业所得税吗
  • 个人以实物出资怎么做账
  • 个人所得税生产经营所得税怎么申报
  • 飞机票电子发票能报销吗
  • sql2008设置
  • 投资款印花税的计税依据
  • 个人独资企业计提的各种准备金支出不得扣除
  • 配件及修理费
  • 个人发票抬头和税号是什么
  • 企业的预付账款属于金融资产吗
  • 固定资产摊余价值怎么计算
  • 年底暂估成本有风险吗
  • 用于不动产的进项税额
  • 增值税减免附加税用计提吗
  • 赞助支出为什么纳税调整
  • 缴纳文化事业建设费的单位应按照提供广告服务
  • 收到税务局汇算清缴退所得税怎么做账
  • mysql 5.7.33安装
  • macpr预设
  • linux大型软件
  • bios如何设置关机键开机
  • 360卫士重装电脑够进入不了桌面
  • Ubuntu 15.04系统怎么安装Visual Studio Code 2015?
  • centos和rhel
  • yum providers命令
  • 关于windows的开始菜单,叙述错误的是
  • javascript解析器
  • 基于怎么用
  • nodejs异步处理执行顺序
  • html label标签的使用教程
  • unity手柄圆盘
  • node用什么写的
  • javascript的push方法
  • 公司车辆购置税怎么做账
  • 润泽一词出自哪里
  • 浙江应急管理厅焊工证查询
  • 特斯拉绿色牌照
  • 贷款利息扣款日未足额缴纳
  • 契税含不含精装修
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设