位置: 编程技术 - 正文

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

  • 销售部门使用的管理设备计提的折旧应计入的账户为
  • 出口退税退的税是用进项税抵扣吗
  • 收到社保局退回的社保费
  • 企业缴纳个人所得税比例
  • 开办期的所得税年度申报
  • 高新技术企业三级领域
  • 印花税按照开票金额缴纳可以吗
  • 分公司可以享受小规模纳税人优惠
  • 预提费用报税时填哪里
  • 三栏式明细账科目编号怎么填
  • 小型微利企业如何计算所得税
  • 小规模纳税人和个体工商户的税收政策
  • 股东捐赠给企业资金保壳
  • 五险一金账务处理流程图
  • 工会经费滞纳金税率
  • 建帐时库存的原材料如何入帐?
  • 分摊材料成本差异率怎么算
  • 银行利息收入可以开增值税专用发票
  • 无偿代建政府公告
  • 父母的股权给子女可以怎样认证
  • 发票可以开具办公用品吗?
  • 逃避缴纳税款是税收法多少条
  • 工商年检社保缴费基数按什么标准填
  • 补记去年收入分录
  • 通讯费税前扣除标准
  • 外汇风险怎么规避
  • 电子发票已开出客户退款会计处理是怎样的?
  • 税务申报利润表本期金额
  • 审计查出假发票怎么补救
  • 出口货物国际运输流程图
  • 同一控制下合并对价怎么算
  • txt文档乱码怎么办
  • windows11怎么打开设置
  • 企业去银行办理贷款需要什么
  • 银行初级证书全称
  • PHP:mb_substitute_character()的用法_mbstring函数
  • 社保公积金的钱可以提出来吗
  • window10玩吃鸡总崩溃
  • 在建工程进项税额抵扣规定
  • 银行对公账户收款码
  • 海康威视网页插件下载
  • Escarpment Trail in Porcupine Mountains Wilderness State Park, Michigan (© Pat & Chuck Blackley/Alamy)
  • 企业低值易耗品有哪些
  • 企业所得税扣除限额标准
  • 只用vue可以做网站不?
  • 汽油发票需要写税号吗?
  • 微擎框架破解版v2.7.7
  • 评价股权转让要交什么税
  • 工业企业变压器容量费用
  • mysql触发器在哪
  • 报销人和经办人的含义
  • 代扣代缴通用缴款书怎么打印
  • 成本和费用有着根本的区别
  • 网购会计如何确认成本
  • 普通发票能做进项吗
  • 房地产开发企业增值税税率
  • 过路费发票抵扣政策
  • 建账时都要建哪些科目
  • 在sql中执行一个创建数据表的脚本文件
  • mysql5.7安装教程详细
  • windows update要禁用吗
  • win8电脑无法识别usb设备怎么办
  • win10文件夹设置
  • mac怎么一键关机
  • mac的command键相当于pc的什么键
  • macos rootless
  • macbookair切换桌面
  • ie10和ie11
  • Linux系统配置IP
  • windows缓存写入失败,数据怎么找回
  • RAVMOND.exe - RAVMOND是什么进程.有什么作用
  • win10系统如何
  • win10预览版bug
  • linux root 密码忘了怎么办
  • win8.1连不上wifi
  • Node.js中的什么模块是用于处理文件和目录的
  • Javascript字符串长度
  • js选中文字
  • 全面解析A型天秤座男
  • 在进口环节海关代征的税种有
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设