位置: 编程技术 - 正文

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

  • 本期应补退税额和期末未缴税额
  • 电梯的税收筹划怎么做
  • 停车费增值税税率
  • 小规模纳税人代扣代缴个人所得税
  • 基本户可以开立几个
  • 电子发票错误怎么重开
  • 个税申报导入上月数据
  • 集装箱维护是做什么的
  • 中国电子口岸证书错误
  • 个体工商户每月需要申报个税吗
  • 企业政策性搬迁所得税
  • 公司收到一张专用发票
  • 租车补贴记入工资的会计处理怎么做?
  • 企业购入旧固定资产如何计提折旧
  • 营改增后非增值税应税项目包括哪些
  • 船运费发票抵扣多少税
  • 现金支付和个人自费
  • 税收缴款书怎么做凭证
  • 个人劳务费怎么开票
  • 小规模纳税人收到专票有什么影响
  • 一般纳税人能开3%的专票吗
  • 资产负债表的应收票据包括什么
  • 跨年度专用发票如何开红字发票
  • 防伪税控发票维修流程
  • 资产评估报告包括
  • 年报企业控股情况怎么填
  • 最新版win10激活
  • 纳税调整需要调年度报表嘛
  • php变量底层实现
  • PHP:session_destroy()的用法_Session函数
  • 可以税前扣除的支出
  • 对数组描述正确的是
  • vue-router跳转
  • 收到过期银行汇票怎么办
  • 外贸进出口企业退税
  • 使用PHP+MySql+Ajax+jQuery实现省市区三级联动功能示例
  • 商住房买卖过户流程
  • 应收账款如何做会计分录
  • 自己的智能ai聊天怎么用
  • html 提交表单
  • cd播放模式
  • 给分公司开的发票,总公司付的款可以吗
  • 顺风车没有发票可以税前扣除吗
  • java printing
  • 公司处置已使用4年多的汽车,怎么增值税申报
  • python方差齐性检验
  • 银行汇票是什么意思易懂
  • 应收账款可以挂存货吗
  • 房地产公司测绘费怎么做会计分录
  • 支付宝付款对面知道名字吗
  • 固定资产折旧和无形资产摊销
  • 个体户一年能开多少票不用交税
  • 注册资金认缴期限一般多少
  • 什么企业的应急预案需要备案
  • 以前年度多交的房产税现在收到退税款了咋做分录
  • 净值型 赎回
  • 折扣如何做账
  • 防伪税控服务费怎么交
  • 车辆违章有几种处理方法
  • 投资有哪些方面
  • 记账凭证如何填写样本
  • 资产负债表编制
  • 私产公产企业产
  • sql搜索字段名
  • win8怎么禁止开机启动项
  • 卡巴斯基key
  • windows资源管理器
  • linux chmod命令用法
  • Ubuntu 14.04安装java的方法以Ubuntu14.04为例
  • 苹果mac系统怎么截屏快捷键
  • windows2008域
  • 使用linux的电脑
  • [置顶]游戏名 TentacleLocker
  • javascript中
  • css查找元素
  • bat脚本自动点击按钮
  • python的例子
  • 消费税的税收筹划案例分析
  • 年休假期间工资支付标准
  • 医务人员抗疫补助发放标准最新
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设