位置: 编程技术 - 正文

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

  • 兴业银行汇款手续费
  • 报税以及注销公司的注意事项?
  • 非独立核算增值税在哪里交
  • 专利银行卡汇款流程
  • 银行日记账的登记实例图
  • 固定资产年数总额法
  • 销售产品产生的运杂费分录
  • 当期允许抵扣的农产品进项税额
  • 购买商标权税率多少
  • 公司注册前发生费用没有发票怎么办
  • 怎么根据进销存做账
  • 出售固定资产的净收益
  • 苗木发票抵扣公式
  • 已认证发票退回的会计分录
  • 年度亏损计提所得税吗
  • 税收优惠包括哪三个方面的内容
  • 公路工程营改增
  • 企业每个月都要关账吗
  • 主营业务税金及附加包括印花税吗
  • 其他业务成本是什么类
  • 财产租赁合同印花税申报期限
  • 小规模纳税人代理记账一年费用
  • 公司合作建房什么意思
  • 固定健身器械使用方法
  • 外贸企业出口收入怎么账务处理
  • 供应商赠送
  • 电费增值税怎么算出来的
  • 多缴个税账务处理
  • 员工有多处收入怎么申报个人所得税
  • 去国外参加展会带什么东西
  • 雨林木风 u盘
  • 上月抵扣的发票怎么开
  • PHP:mcrypt_module_is_block_algorithm()的用法_Mcrypt函数
  • phpinfo() 中 Local Value(局部变量)Master Value(主变量) 的区别
  • 森佩塑胶
  • php常用命令
  • vue property decorator
  • php网页聊天室
  • 商品流通的企业
  • 破解版微擎框架如何升级
  • 发票抬头为个人的纳税人识别号
  • 补开上年发票的税务处理要怎么做?
  • 工资薪金和外出费用区别
  • 收到退回的企业所得税分录
  • sql纵表转横表
  • 建筑企业属于什么类型
  • 空调维修费入办公费还是修理费
  • 营业执照是什么字体
  • 月报表该怎么做表格
  • 收到的稳岗补贴是否需要交税
  • 暂估费用科目
  • 公司购买的家电怎么入账
  • 筹建期间发生的长期借款利息费用计入财务费用
  • 到银行货款现金怎么货
  • 电子发票怎么截屏
  • MySQL ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) 的原因分解决办法
  • sqlserver 中ntext字段的批量替换(updatetext的用法)
  • xp电脑工作组找不到其他电脑
  • 主板bios恢复出厂默认设置方法
  • 查看电伊
  • Win10预览版怎么变回正式版
  • windows log在哪里
  • xp系统怎么取消密码怎么设置
  • edge新版浏览器
  • 进程 电脑
  • linux中grep命令用法
  • win7电脑弹窗多怎么解决
  • 景深图片的3d显示器
  • ExtJs扩展之GroupPropertyGrid代码
  • el-select tree
  • easyui下拉列表
  • jquery文本框内容改变事件
  • js设置滚动条滚到底部
  • linux触控
  • js解析json字符串获取key
  • 快速解决偏头痛的6个方法
  • python的get
  • 绿化工程项目
  • 财政云操作视频
  • 怎样登录市地税局网站
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设