คำถามติดแท็ก sql-server

Microsoft SQL Server ทุกรุ่น (ไม่ใช่ MySQL) โปรดเพิ่มแท็กเฉพาะเวอร์ชันเช่น sql-server-2016 เนื่องจากมักเกี่ยวข้องกับคำถาม

2
สแกนแกนอย่างต่อเนื่อง
ฉันมีตารางที่มีแถวไม่กี่สิบแถว การตั้งค่าแบบง่ายกำลังติดตาม CREATE TABLE #data ([Id] int, [Status] int); INSERT INTO #data VALUES (100, 1), (101, 2), (102, 3), (103, 2); และฉันมีแบบสอบถามที่รวมตารางนี้เข้ากับชุดของค่าตารางที่สร้างแถว (ทำจากตัวแปรและค่าคงที่) เช่น DECLARE @id1 int = 101, @id2 int = 105; SELECT COALESCE(p.[Code], 'X') AS [Code], COALESCE(d.[Status], 0) AS [Status] FROM (VALUES (@id1, 'A'), (@id2, 'B') ) p([Id], …

3
เชื่อมค่าทั้งหมดขององค์ประกอบ XML เดียวกันโดยใช้ XPath / XQuery
ฉันมีค่า XML ดังนี้: <R> <I>A</I> <I>B</I> <I>C</I> ... </R> ฉันต้องการที่จะเชื่อมทุกค่าและพวกเขากลับเป็นสตริงเดียว:IABC... ตอนนี้ฉันรู้แล้วว่าฉันสามารถทำลาย XML, รวมผลลัพธ์กลับเป็น XML แบบไม่มีโหนดและนำ.values('text()[1]', ...)ไปใช้กับผลลัพธ์: SELECT ( SELECT n.n.value('text()[1]', 'varchar(50)') AS [text()] FROM @MyXml.nodes('/R/I') AS n (n) FOR XML PATH (''), TYPE ).value('text()[1]', 'varchar(50)') ; อย่างไรก็ตามฉันต้องการทำทุกอย่างที่ใช้วิธี XPath / XQuery เท่านั้นสิ่งนี้: SELECT @MyXml. ? ( ? ); มีวิธีดังกล่าวหรือไม่? เหตุผลที่ฉันกำลังมองหาวิธีแก้ปัญหาในทิศทางนี้เป็นเพราะ XML …

1
เรียงลำดับการรั่วไหลไปยัง tempdb แต่แถวโดยประมาณจะเท่ากับแถวจริง
บน SQL Server 2016 SP2 ที่มีหน่วยความจำสูงสุดตั้งไว้ที่ 25GB เรามีแบบสอบถามที่ดำเนินการประมาณ 80 ครั้งในหนึ่งนาที แบบสอบถามรั่วไหลประมาณ 4,000 หน้าไปยัง tempdb ซึ่งทำให้ IO จำนวนมากบนดิสก์ของ tempdb เมื่อคุณดูที่แผนแบบสอบถาม (แบบสอบถามแบบง่าย) คุณจะเห็นว่าจำนวนแถวโดยประมาณเท่ากับจำนวนแถวจริง แต่ยังคงเกิดการรั่วไหล ดังนั้นสถิติที่ล้าสมัยไม่สามารถเป็นสาเหตุของปัญหาได้ ฉันทำการทดสอบและแบบสอบถามต่อไปนี้รั่วไหลไปยัง Tempdb: select id --uniqueidentifier from SortProblem where [status] ='A' order by SequenceNumber asc option (maxdop 1) แต่ถ้าฉันเลือกคอลัมน์อื่นจะไม่มีการรั่วไหลเกิดขึ้น: select startdate --datetime from SortProblem where [status] ='A' order …

2
เหตุใดตารางอุณหภูมิจึงเป็นโซลูชันที่มีประสิทธิภาพมากขึ้นสำหรับปัญหาฮาโลวีนมากกว่าตัวหลอดที่กระตือรือร้น
พิจารณาแบบสอบถามต่อไปนี้ที่แทรกแถวจากตารางต้นฉบับเฉพาะเมื่อยังไม่ได้อยู่ในตารางเป้าหมาย: INSERT INTO dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR WITH (TABLOCK) SELECT maybe_new_rows.ID FROM dbo.A_HEAP_OF_MOSTLY_NEW_ROWS maybe_new_rows WHERE NOT EXISTS ( SELECT 1 FROM dbo.HALLOWEEN_IS_COMING_EARLY_THIS_YEAR halloween WHERE maybe_new_rows.ID = halloween.ID ) OPTION (MAXDOP 1, QUERYTRACEON 7470); รูปร่างแผนหนึ่งที่เป็นไปได้รวมถึงการรวมการผสานและสปูลที่กระตือรือร้น ผู้ประกอบการสปูลกระตือรือร้นที่จะนำเสนอเพื่อแก้ปัญหาฮาโลวีน : บนเครื่องของฉันรหัสด้านบนจะทำงานในเวลาประมาณ 6900 มิลลิวินาที รหัส Repro เพื่อสร้างตารางรวมอยู่ที่ด้านล่างของคำถาม หากฉันไม่พอใจกับการแสดงฉันอาจลองโหลดแถวเพื่อแทรกลงในตารางชั่วคราวแทนการใช้สปูลกระตือรือร้น การดำเนินการหนึ่งที่เป็นไปได้มีดังนี้: DROP TABLE IF EXISTS #CONSULTANT_RECOMMENDED_TEMP_TABLE; CREATE TABLE #CONSULTANT_RECOMMENDED_TEMP_TABLE ( …

5
เป็นวิธีที่เร็วที่สุดในการแปลง ints 1: 1 เป็นเลขฐานสองแบบ null ได้คืออะไร?
ส่วนหนึ่งของภาระงานของฉันใช้ฟังก์ชั่น CLR ที่ใช้อัลกอริทึมแฮชที่น่ากลัวเพื่อเปรียบเทียบแถวเพื่อดูว่ามีการเปลี่ยนแปลงค่าคอลัมน์ใด ๆ หรือไม่ ฟังก์ชั่น CLR รับสตริงไบนารีเป็นอินพุตดังนั้นฉันต้องการวิธีที่รวดเร็วในการแปลงแถวเป็นสตริงไบนารี ฉันคาดว่าจะแฮชประมาณ 10 พันล้านแถวในระหว่างการทำงานเต็มรูปแบบดังนั้นฉันต้องการรหัสนี้ให้เร็วที่สุด ฉันมีตารางประมาณ 300 ตารางที่มีสกีมาแตกต่างกัน สำหรับจุดประสงค์ของคำถามนี้โปรดสมมติโครงสร้างตารางอย่างง่ายที่มีค่าเป็น 32 INTคอลัมน์ ฉันได้ให้ข้อมูลตัวอย่างรวมถึงวิธีการเปรียบเทียบผลลัพธ์ที่ด้านล่างของคำถามนี้ แถวต้องถูกแปลงเป็นสตริงไบนารีเดียวกันหากค่าคอลัมน์ทั้งหมดเหมือนกัน แถวต้องถูกแปลงเป็นสตริงไบนารีที่แตกต่างกันหากค่าคอลัมน์ใด ๆ แตกต่างกัน ตัวอย่างเช่นรหัสง่าย ๆ ดังต่อไปนี้จะไม่ทำงาน: CAST(COL1 AS BINARY(4)) + CAST(COL2 AS BINARY(4)) + .. มันไม่จัดการ NULL อย่างถูกต้อง ถ้าCOL1เป็น NULL สำหรับแถวที่ 1 และCOL2เป็น NULL สำหรับแถวที่ 2 ดังนั้นทั้งสองแถวจะถูกแปลงเป็นสตริง NULL ฉันเชื่อว่าการจัดการ NULL ที่ถูกต้องเป็นส่วนที่ยากที่สุดในการแปลงทั้งแถวอย่างถูกต้อง …

1
เพื่อนร่วมงานของฉันได้รับสคีมาของตัวเองได้อย่างไร
ฉันมีขั้นตอนการจัดเก็บที่: ตรวจสอบว่ามีตารางอยู่หรือไม่และหากเป็นเช่นนั้นให้ลดลง สร้างตารางนั้นอีกครั้ง จากนั้นเติมตารางนั้นด้วยข้อความค้นหาประมาณ 30 รายการ เมื่อฉัน (เจ้าของฐานข้อมูล) เรียกใช้ proc นี้ทุกอย่างทำงานตามที่ตั้งใจไว้ เมื่อเพื่อนร่วมงานของฉันทำเช่นนั้นใครมีสิทธิ์ DROP / CREATE ในฐานข้อมูลนี้ผ่านบทบาทใน Active Directory หลายสิ่งผิดปกติ นี่คือสิ่งที่รบกวนจิตใจของฉัน: การสร้างตารางไม่ได้ระบุdboสคีมาไว้อย่างชัดเจนก่อนชื่อ สิ่งนี้ส่งผลให้ตารางที่เรียกว่าdomain\cowork_id.table_name_heretable ถูกสร้างขึ้น นอกเหนือจากตารางที่ถูกสร้างในสคีมาส่วนตัวตอนนี้เขายังมีสคีมานั้นในฐานข้อมูล (มันไม่ได้มีอยู่ก่อนการรัน proc) เกิดอะไรขึ้น? เหตุใด SQL Server จึงสร้างตารางในสคีมาของผู้ใช้แทนที่จะเป็นdboเมื่อไม่ได้ระบุไว้

4
ดัชนีค่าใช้จ่ายที่ไม่ซ้ำกัน
ฉันได้มีการถกเถียงอย่างต่อเนื่องกับนักพัฒนาหลายคนในสำนักงานของฉันเกี่ยวกับค่าใช้จ่ายของดัชนีและความเป็นเอกลักษณ์หรือไม่นั้นมีประโยชน์หรือมีค่าใช้จ่ายสูง (อาจเป็นได้ทั้งสองอย่าง) ปมของปัญหาคือทรัพยากรการแข่งขันของเรา พื้นหลัง ก่อนหน้านี้ฉันได้อ่านการสนทนาที่ระบุว่าUniqueดัชนีนั้นไม่มีค่าใช้จ่ายเพิ่มเติมในการบำรุงรักษาเนื่องจากการInsertดำเนินการโดยปริยายจะตรวจสอบว่าตรงกับต้นไม้ B หรือไม่และหากพบซ้ำในดัชนีที่ไม่ซ้ำใคร จุดสิ้นสุดของคีย์ แต่อย่างอื่นแทรกโดยตรง ในลำดับเหตุการณ์นี้Uniqueดัชนีไม่มีค่าใช้จ่ายเพิ่มเติม ผู้ร่วมงานของฉันต่อสู้กับแถลงการณ์นี้โดยกล่าวว่าการUniqueบังคับใช้เป็นการดำเนินการครั้งที่สองหลังจากการค้นหาตำแหน่งใหม่ในต้นไม้ B และทำให้ค่าใช้จ่ายในการบำรุงรักษาสูงกว่าดัชนีที่ไม่ซ้ำใคร ที่แย่ที่สุดฉันได้เห็นตารางที่มีคอลัมน์ข้อมูลประจำตัว (ไม่ซ้ำกันโดยเนื้อแท้) นั่นคือคีย์การทำคลัสเตอร์ของตาราง แต่ระบุไว้อย่างชัดเจนว่าไม่ซ้ำกัน ในอีกด้านหนึ่งของความเลวร้ายที่สุดคือการครอบงำจิตใจของฉันด้วยเอกลักษณ์และดัชนีทั้งหมดจะถูกสร้างขึ้นเป็นเอกลักษณ์และเมื่อไม่สามารถกำหนดความสัมพันธ์ที่ไม่ซ้ำกันอย่างชัดเจนกับดัชนีฉันผนวก PK ของตารางไปยังจุดสิ้นสุดของดัชนีเพื่อรับรอง รับประกันความเป็นเอกลักษณ์ ฉันมีส่วนร่วมในการตรวจสอบโค้ดสำหรับทีม dev บ่อยครั้งและฉันต้องสามารถให้แนวทางทั่วไปเพื่อให้พวกเขาทำตาม ใช่ทุกดัชนีควรได้รับการประเมิน แต่เมื่อคุณมีเซิร์ฟเวอร์ห้าตัวที่มีตารางนับพันแต่ละตัวและมากถึงยี่สิบดัชนีในตารางคุณจะต้องสามารถใช้กฎง่าย ๆ เพื่อรับประกันคุณภาพในระดับหนึ่ง คำถาม เอกลักษณ์มีค่าใช้จ่ายเพิ่มเติมที่ส่วนท้ายของการInsertเปรียบเทียบกับค่าใช้จ่ายในการบำรุงรักษาดัชนีที่ไม่ซ้ำหรือไม่? ประการที่สองมีอะไรผิดปกติในการผนวกคีย์หลักของตารางต่อท้ายดัชนีเพื่อให้แน่ใจว่ามีเอกลักษณ์? ตัวอย่างคำจำกัดความของตาราง create table #test_index ( id int not null identity(1, 1), dt datetime not null default(current_timestamp), val varchar(100) not …

1
ในฐานะที่เป็น SQL Server DBA ฉันต้องรู้อะไรบ้างเกี่ยวกับช่องโหว่ของการล่มสลาย / ปีศาจ
คำตอบของคำถามนี้เป็นความพยายามของชุมชน แก้ไขคำตอบที่มีอยู่เพื่อปรับปรุงโพสต์นี้ ขณะนี้ไม่ยอมรับคำตอบหรือการโต้ตอบใหม่ หากคุณไม่เคยได้ยินชุดช่องโหว่ที่เกี่ยวข้องจะถูกค้นพบเมื่อไม่นานมานี้ซึ่งส่งผลกระทบต่อโปรเซสเซอร์เกือบทั้งหมดที่ขายในช่วงทศวรรษ คุณสามารถค้นหารายละเอียดทางเทคนิคเพิ่มเติมเกี่ยวกับช่องโหว่วิกฤต / ปีศาจบน InfoSec.SE ในฐานะ SQL Server DBA ฉันต้องเข้าใจอะไรบ้าง หากเราไม่แบ่งปันเซิร์ฟเวอร์ SQL ของเรา (หรือฟาร์ม vm ของเรา) กับ บริษัท อื่น ๆ นี่เป็นความเสี่ยงหรือไม่? นี่จะเป็นเพียงแพตช์ระบบปฏิบัติการหรือไม่ หรือมี patch / hotfixes สำหรับ SQL Server ที่ต้องการแก้ไขช่องโหว่นี้ SQL Server เวอร์ชันใดที่จะได้รับการแก้ไข บางบทความคาดการณ์ผลกระทบด้านประสิทธิภาพ 5-30% โดยเฉพาะในสภาพแวดล้อมที่มีการจำลองเสมือนสูง มีวิธีใดที่จะทำนายว่าประสิทธิภาพการทำงานของเซิร์ฟเวอร์ SQL ของฉันจะเป็นอย่างไร

1
เหตุใด SQL Server จึงไม่มีคำขอดัชนีที่ขาดหายไปใน DMV หรือแผนการสืบค้น
ฉันมีฐานข้อมูล SQL Server ที่แบบสอบถามค่อนข้างช้าและมีการล็อคและบล็อกจำนวนมาก เมื่อฉันดูดัชนี DMV ที่ขาดหายไปและแผนการสืบค้นไม่มีคำแนะนำใด ๆ ทำไมถึงเป็นอย่างนั้น?

2
ประสิทธิภาพการแทรกของ SQL Server 2016 เทียบกับ 2012
ฉันมี SQL Server สองอินสแตนซ์บนเซิร์ฟเวอร์เดียวกัน: Microsoft SQL Server 2012 (SP1) - 11.0.3000.0 (X64) รุ่นมาตรฐาน (64 บิต) Microsoft SQL Server 2016 (SP1-CU5) (KB4040714) - 13.0.4451.0 (X64) รุ่นองค์กร (64 บิต) ผลลัพธ์ sp_configure เหมือนกันทั้งสองอินสแตนซ์ (ยกเว้นตัวเลือกใหม่ 2016) ฉันสร้างฐานข้อมูลใหม่บนทั้งสองอินสแตนซ์ในโฟลเดอร์ดิสก์เดียวกัน พารามิเตอร์ Autogrowth เหมือนกัน ตัวเลือกสถิติอัตโนมัติและการอัปเดตอัตโนมัติถูกปิด จากนั้นฉันได้ทำการทดสอบโดยมีใบมีด 10,000 อันเข้าไปในกอง: set nocount on go create table dbo.TestInsert ( i int …

1
การปรับปรุงดัชนีที่ไม่ซ้ำกันและเคาน์เตอร์แก้ไขแถวสถิติ
รับตารางต่อไปนี้ดัชนีคลัสเตอร์ที่ไม่ซ้ำกันและสถิติ: CREATE TABLE dbo.Banana ( pk integer NOT NULL, c1 char(1) NOT NULL, c2 char(1) NOT NULL ); CREATE UNIQUE CLUSTERED INDEX pk ON dbo.Banana (pk); CREATE STATISTICS c1 ON dbo.Banana (c1); CREATE STATISTICS c2 ON dbo.Banana (c2); INSERT dbo.Banana (pk, c1, c2) VALUES (1, 'A', 'W'), (2, 'B', 'X'), …

4
เหตุใด TSQL จึงส่งกลับค่าที่ไม่ถูกต้องสำหรับ POWER (2. , 64)
select POWER(2.,64.)ส่งกลับแทน18446744073709552000 18446744073709551616ดูเหมือนว่าจะมีความแม่นยำเพียง 16 หลัก (ปัดเศษที่ 17) แม้จะทำให้ความแม่นยำชัดเจนselect power(cast(2 as numeric(38,0)),cast(64 as numeric(38,0)))มันยังคงส่งกลับผลลัพธ์ที่ถูกปัดเศษ ดูเหมือนว่าเป็นการดำเนินการขั้นพื้นฐานที่สวยงามที่จะแสดงผลออกมาอย่างแม่นยำด้วยความแม่นยำ 16 หลักเช่นนี้ สูงสุดที่จะสามารถคำนวณได้อย่างถูกต้องเป็นเพียงความล้มเหลวสำหรับPOWER(2.,56.) POWER(2.,57.)เกิดขึ้นที่นี่คืออะไร? สิ่งที่น่ากลัวจริงๆก็คือการselect 2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.*2.;คืนค่าที่เหมาะสม มากสำหรับความอดทน

2
ในการค้นหาข้อมูลภายในของ FILESTREAM
เมื่อฟีเจอร์ FILESTREAM เปิดใช้งานบน Microsoft SQL Server 2012 SQL Server จะสร้างการแชร์ "ที่ซ่อนอยู่" บนระบบ การแบ่งปันถูกกำหนดดังนี้: Sharename FILESTREAM_SHARE Path \\?\GLOBALROOT\Device\RsFx0320\<localmachine>\FILESTREAM_SHARE Remark SQL Server FILESTREAM share Maximum users unlimited Users Caching Manual caching of documents Permissions NT-AUTHORITY\Authenticated Users, FULL ชื่อที่เป็นชื่อของหุ้นที่คุณให้เมื่อเริ่มแรกการกำหนดค่า FILESTREAM ในการกำหนดค่าเซิร์ฟเวอร์ SQL ผู้จัดการ แต่มันมีไว้เพื่ออะไร? จนถึงตอนนี้ ฉันอ่านเอกสาร FILESTREAM ทั้งหมดที่มีอยู่เริ่มต้นที่: FILESTREAM (เซิร์ฟเวอร์ SQL) เปิดใช้งานและกำหนดค่า FILESTREAM …

3
คำแนะนำเกี่ยวกับ cardinality ของ SQL Server
มีวิธีการ 'ฉีด' การประมาณค่าเชิงปริมาณให้กับเครื่องมือเพิ่มประสิทธิภาพ SQL Server (ทุกรุ่น) หรือไม่? เช่นสิ่งที่คล้ายกับคำใบ้สำคัญของออราเคิล แรงจูงใจของฉันถูกขับเคลื่อนโดยบทความเครื่องมือเพิ่มประสิทธิภาพการค้นหาดีแค่ไหนจริงเหรอ? [1]ซึ่งพวกเขาทดสอบอิทธิพลของตัวประมาณความสำคัญต่อการเลือกแผนที่ไม่ดี ดังนั้นมันจะเพียงพอหากฉันสามารถบังคับให้ SQL Server 'ประมาณการ' สำคัญ ๆ อย่างแม่นยำสำหรับการสืบค้นที่ซับซ้อน [1] Leis, Viktor, et al. "เครื่องมือเพิ่มประสิทธิภาพข้อความค้นหาดีแค่ไหนจริง ๆ " การดำเนินการของ VLDB Endowment 9.3 (2015): 204-215

4
ตรวจสอบว่าค่าใด ๆ ในคอลัมน์ NVARCHAR เป็น Unicode จริงหรือไม่
ฉันได้รับฐานข้อมูล SQL Server บางตัว มีตารางหนึ่งตาราง (ฉันจะเรียกว่า "G") มีประมาณ 86.7 ล้านแถวและกว้าง 41 คอลัมน์จากฐานข้อมูลต้นทาง (ฉันจะเรียกว่า "Q") บนมาตรฐาน SQL Server 2014 ที่ได้รับ ETL ฐานข้อมูลเป้าหมาย (ฉันจะเรียกว่า "P") ด้วยชื่อตารางเดียวกันใน SQL Server 2008 R2 Standard เช่น [Q]. [G] ---> [P]. [G] แก้ไข: 3/20/2017: บางคนถามว่าตารางแหล่งข้อมูลนั้นเป็นแหล่งข้อมูลเดียวกับตารางเป้าหมายหรือไม่ ใช่มันเป็นแหล่งเดียว เท่าที่ ETL ดำเนินไปจะไม่มีการเปลี่ยนแปลงเกิดขึ้นจริง มันมีประสิทธิภาพมีวัตถุประสงค์เพื่อสำเนา 1: 1 ของแหล่งข้อมูล ดังนั้นจึงไม่มีแผนที่จะเพิ่มแหล่งข้อมูลเพิ่มเติมลงในตารางเป้าหมายนี้ มากกว่าครึ่งหนึ่งของคอลัมน์ใน [Q] [G] …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.