位置: 编程技术 - 正文

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

  • 建筑企业交税流程
  • 增值税专票开错了可以作废吗
  • 增值税期末留底退税政策解读
  • 交通费中的高速费怎么算
  • 企业购房产的进项税税额
  • 财务软件属于无形资产的哪一种
  • 社保稽查公司提供不了会计分录怎么办
  • 用进项税冲抵当月增值税的会计分录
  • 一般纳税人增值税申报操作流程
  • 报损失怎么报
  • 企业发生的辞退福利
  • 应扣未扣税款向谁追缴
  • 单式记账法是什么意思呀
  • 实发工资比计提多汇算清缴要怎么处理
  • 当月发票已认证还能作废吗
  • 无形资产摊销的年限规定
  • 营改增之后餐饮业的税收政策
  • 民办幼儿园所得税优惠政策
  • 财税政策是什么
  • 法人变更了还用变更发票领用本吗
  • 应收账款收款后怎么做账
  • 个税扣缴端如何删除员工信息
  • 社保企业报盘是什么
  • 小规模纳税人如何交增值税
  • 测网速中国联通
  • 应收账款的账务处理方式是什么
  • 电脑开机需要按ctrl+alt+del怎么取消
  • 删除文件时不放大怎么办
  • ipad os 16
  • 系统更新到win11后还可以调回win10吗
  • 跨平台桌面程序
  • 存货报废如何账务处理
  • 上市公司分红派股
  • 收取职工交来伙食费如何入账
  • php抓取
  • SwinIR实战:详细记录SwinIR的训练过程
  • 机器学习--使用朴素贝叶斯进行垃圾邮件分类
  • vgchange命令
  • 小微企业具体指
  • 迭代器实现原理
  • MYSQL数据库设计与应用第二版
  • 编写脚本语言
  • 主营业务成本应交税费
  • 租金收入如何确认收入
  • 报销人和经办人的含义
  • MYSQL administrator 使用
  • 单位买车和个人买车交税有何不同
  • 特殊收入如何计税
  • 年应税销售额是指纳税人在连续不超过12个月或四个季度
  • 金税盘减免税款分录
  • 专用发票跨月退税怎么办
  • 一般哪些收据可以抵扣
  • 退休人员基本养老金计发表
  • 税务突然查账
  • 施工单位代建收费合理吗
  • 外资企业股权转让给内资企业流程
  • 发票遗失复印件可以入账吗
  • 打印的机票行程单怎么看
  • 税局代开的法律顾问费能否抵扣?
  • 房租增值税专用发票几个点
  • 简单谈谈设计与市场的关系
  • 微软9月22
  • Linux Container(LXC容器)的基本命令使用简介
  • linux 对比文件
  • w10强制更新怎么关闭
  • win10屏幕亮度怎么调节快捷键
  • un_a.exe
  • 禁用windows installer没有用
  • mac和iphone互动
  • 电脑window8系统怎么样
  • win8.1应用商店无法连接网络
  • javascript entries
  • android的handler
  • 禁止指定qq号登录怎么弄
  • Android studio第一行报错
  • javascript实现2016新年版日历
  • jquery网页跳转
  • 纳税申报期过了怎么申报
  • 福州税务实名认证
  • 上海增值税发票抵扣
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设