好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > LINQ to SQL:處理char(1)字段的方式會引起全表掃描問題

LINQ to SQL:處理char(1)字段的方式會引起全表掃描問題

熱門標簽:外呼系統改進 分享百度地圖標注多個位置 湖南電腦外呼系統平臺 廣東防封卡外呼系統原理是什么 電銷機器人公司 需要哪些牌照 菏澤語音電銷機器人加盟公司 地圖標注牌 長沙智能外呼系統 知名電銷機器人價格

image 

如果表中的字段類型為 char(1) 時,Linq to SQL生成char (System.Char)的屬性,如下圖

image image
表定義 生成的實體

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) [65]
-- Context: SqlProvider(Sql2000) Model: AttributedMetaModel Build: 3.5.21022.8

注意到Where語句了嗎?是WHERE UNICODE([t0].[LineCode]) = 65,這里先取LineCode列內容的UNICODE再和'A'的UNICODE比較。我們知道'A'和'a'的UNICODE是不同的。UNICODE('A') =65,UNICODE('a')=97,也就是說,我們在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) [97]
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) [65]

明顯,在Linq to sql是查詢char(1)類型字段是區分大小寫的。

這還會導致一個比較嚴重的問題,我們知道在SQL Server中,任何在運算符左邊的操作都會使SQL采用全表掃描。也就是說,Linq的這個查詢,會引起全表掃描,即使[LineCode]列上定義了聚合索引。而如果是where [linecode]='A',則可以使用索引。我們看下這二種情況時的查詢執行計劃對比。

image

圖中可以看出,Linq to SQL 生成的SQL語句是表掃描,而后者則是索引查找。

 

3.

對策

在DBML設計器中將LineCode改成string類型。

image

看一下改了之后的查詢

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(Sql2000) Model: AttributedMetaModel Build: 3.5.21022.8
Linq sql

改為string后,生成的SQL不再用UNICODE函數了,就解決了區分大小寫和引起全表掃描的問題。但又引起一個新的問題,因為數據庫中存儲的數據長度是1,在Insert和Update時就要注意,LineCode不要輸入過長的內容,否則會出錯了。

標簽:福建 商洛 泉州 美容院 珠海 天水 呼和浩特 西寧

巨人網絡通訊聲明:本文標題《LINQ to SQL:處理char(1)字段的方式會引起全表掃描問題》,本文關鍵詞  LINQ,SQL,處理,char,字段,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《LINQ to SQL:處理char(1)字段的方式會引起全表掃描問題》相關的同類信息!
  • 本頁收集關于LINQ to SQL:處理char(1)字段的方式會引起全表掃描問題的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 女性自动伸缩器| 好色影城| 成 人 十 八 黄 色 网 站 视 频| 国产69精品久久久久999小说| 国产精美视频| 12—13女人A片毛片免费| 99在线无码精品秘?入口电车| 男生和女生做运动| 69堂国产精品成人无码视频| 琪琪无码午夜精品久久久久| 黄文hhh| japonensisjava美国| 女人扒开屁股让男人桶| …老熟女高潮一区二区三区国产9…| 女人又黄的视频网站| 停不了的爱在线观看高清| 麻豆+无码+国产在线观看| 小火箭免费节点每天更新| 成年人性视频| 老师办公室疯狂娇吟迎合| 周妍希被?出水了| 美女的秘?让男人桶到爽原神 | 动漫3d美女被吸乳羞羞漫画| 欧美综合图区亚洲综合图区69| 乱肉合集乱500篇小| 进去了太刺激了发出呻吟声| 性生活软件直播| 国产一级婬片A片AAA情欲王朝| tube动漫tubesex动漫| 揉胸摸下面视频| 在线观看高清视频bbixx| 肉嫁の高柳动漫1~4在哪看| 亚洲人成网站在线观看香蕉| 3p嗯啊~用力~嗯~高潮了动漫| 毛片网站在线观看| 公主被强出水呻吟被中出A片视频 又大又白的奶被两黑人捧着吃 | 曰批全过程免费视频观看软件| 福利片91| 3d试机号今天晚上的| 国产精品60岁老女人| 性福利视频|