位置: 编程技术 - 正文

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

  • 税务处理决定书与税务处罚决定书
  • 教育行业税收优势分析
  • 三代手续费怎么申请返还
  • 出售未计提完折旧的固定资产
  • 没有及时取得发票可以入成本么
  • 筹建期可以有收入吗
  • 没有进货发票怎么处罚
  • 固定资产发票未到可以确认固定资产吗
  • 增值税发票红字发票怎么做凭证
  • 增值税专票5%税率
  • 外贸公司发票过期怎么办
  • 企业所得税预缴纳税申报表
  • 购进建筑服务进项税额
  • 申请增值税一般纳税人登记在办理手续
  • 财务报表依据的会计记录
  • 外贸企业增值税表二填写流程
  • 经营性租入的设备是资产吗
  • 包装物怎么入账
  • 租房押金收不回来怎么做账
  • 转出未交增值税借方余额表示什么
  • 对方已认证的发票在哪里
  • 公司发工资了
  • 联想笔记本e49系列哪款好
  • mac电脑command键快捷设置
  • hp tpn-c120笔记本
  • 怎么看iPhone电池温度
  • 公司有长期挂账的权利吗
  • 蝾螈白话怎么读
  • phpstorm ftp
  • 支付本月职工薪酬
  • php生成二维码
  • AI:ModelScope(一站式开源的模型即服务共享平台)的简介、安装、使用方法之详细攻略
  • yolov3网络结构详解
  • php中session什么意思
  • 向境外支付技术提成费需要提交什么材料
  • 无形资产相关税费
  • php中的pdo
  • ubuntu搭建web服务器流程
  • 数据分析实战
  • php快速排序非递归
  • 代销手续费怎么开票
  • 车辆车船税收费标准
  • 公司能经营烟草公司吗
  • 税前列支的项目
  • 小规模纳税人技术维护费可以抵扣吗
  • 评估价计入什么科目
  • 发票 认证抵扣
  • 取得抵债资产
  • 只有进项税额没有销项税额怎么结转
  • 小企业会计制度废止
  • 收到商业汇票计什么科目
  • 其他公司借款现金怎么办
  • 一般纳税人劳务税率是多少?
  • 发票商品编码表
  • 公司为员工租房应注意
  • 为什么要计提工资
  • mysql导出语句
  • 监控系统文件
  • mysql字符串类型有哪些
  • win10 rs5
  • bios密码忘记了取电池不管用
  • windows无法启动wlanautoconfig服务
  • 系统磁盘碎片整理
  • linux安装和配置
  • centos开启后一直黑屏
  • WIN7系统如何恢复出厂系统
  • win7安装kb4534310补丁失败
  • win8.1和win10哪个好用
  • windows批处理命令大全
  • ant编译工具
  • js内置对象方法有哪些
  • jquery和dom对象之间怎么转换
  • 创建nodejs项目的步骤
  • 批处理执行bat文件
  • jquery和css的区别
  • 印花税没有按时申报怎么办
  • 通州区税务局办税大厅电话号码
  • 国税地税什么时候申报
  • 城市维护建设税,教育费附加,地方教育费附加
  • 购旧设备增值税能不能抵扣
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设