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

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

3
ตัวระบุที่ไม่ซ้ำกับอักขระพิเศษที่ยังจับคู่ในการเลือก
เรากำลังใช้ SQL Server 2012 ด้วยตัวระบุที่ไม่ซ้ำกันและเราสังเกตว่าเมื่อทำการเลือกด้วยอักขระเพิ่มเติมที่เพิ่มเข้ามาในตอนท้าย (ไม่ใช่ 36 ตัวอักษร) มันยังคงส่งคืนการจับคู่กับ UUID ตัวอย่างเช่น: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8' ส่งกลับแถวที่มี 7DA26ECB-D599-4469-91D4-F9136EC0B4E8uuid แต่ถ้าคุณวิ่ง: select * from some_table where uuid = '7DA26ECB-D599-4469-91D4-F9136EC0B4E8EXTRACHARS' ก็ยังส่งกลับแถวที่มี 7DA26ECB-D599-4469-91D4-F9136EC0B4E8uuid SQL Server ดูเหมือนจะไม่สนใจอักขระทั้งหมดที่เกิน 36 เมื่อทำการเลือก นี่เป็นข้อบกพร่อง / คุณสมบัติหรือสิ่งที่สามารถกำหนดค่าได้หรือไม่? มันไม่ได้เป็นปัญหาใหญ่เท่าที่เรามีการตรวจสอบในส่วนหน้าสำหรับความยาว แต่ดูเหมือนว่าพฤติกรรมที่ไม่ถูกต้องสำหรับฉัน


2
ค้นหาคีย์ต่างประเทศที่เกี่ยวข้องกับคีย์หลักที่กำหนด
ฉันต้องการวิธีในการสร้างคอลัมน์ในฐานข้อมูลที่กำหนดที่จะเข้าร่วมผ่านความสัมพันธ์ PK / FK ฉันสามารถส่งคืนข้อมูล PK / FK สำหรับตารางที่กำหนดผ่าน SELECT * FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE AS cu WHERE EXISTS ( SELECT tc.* FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS AS tc WHERE tc.CONSTRAINT_CATALOG = 'MyDatabase' AND tc.TABLE_NAME = 'MyTable' /*AND tc.CONSTRAINT_TYPE = 'PRIMARY KEY'*/ AND tc.CONSTRAINT_NAME = cu.CONSTRAINT_NAME); GO แต่สำหรับ PK ที่ส่งคืนจากคิวรีดังกล่าวฉันจะสร้าง FK ที่เชื่อมโยงได้อย่างไร (สมมติว่ามี) ฉันรู้ว่าคุณยังสามารถรับตารางอ้างอิงผ่าน: SELECT …

5
ไม่พบตัวแทนเซิร์ฟเวอร์ใน SSMS
ฉันทำตามคำแนะนำ - http://www.sqlchicken.com/2009/07/how-to-create-a-server-side-trace-with-sql-profiler/ซึ่งทำงานจนกว่าฉันจะไปถึงขั้นตอนที่ 8 ตอนนี้เพื่อกำหนดตารางสคริปต์ที่สร้างขึ้นใหม่ของคุณ ใน SSMS เชื่อมต่อกับเซิร์ฟเวอร์ที่คุณต้องการติดตาม ไปที่ตัวแทนเซิร์ฟเวอร์ SQL ของคุณและขยายเพื่อให้คุณเห็นโฟลเดอร์งาน คลิกขวาที่โฟลเดอร์งานและเลือกงานใหม่ SQL Server Agentฉันไม่สามารถไม่พบ ฉันจะทำให้สิ่งนี้SQL Server Agentมองเห็นได้ที่ไหน ฉันให้สิทธิ์การเข้าถึงทั้งหมดแก่ผู้ใช้ปัจจุบัน

1
ปัจจัยใดบ้างที่เข้าสู่ดัชนีแบบกลุ่มของดัชนีการดูที่ถูกเลือก?
โดยสังเขป ปัจจัยใดที่พวกเขาค้นหาการเลือกดัชนีของมุมมองที่จัดทำดัชนีไว้ของเครื่องมือเพิ่มประสิทธิภาพ สำหรับฉันการดูที่จัดทำดัชนีดูเหมือนจะท้าทายสิ่งที่ฉันเข้าใจเกี่ยวกับวิธีที่เครื่องมือเพิ่มประสิทธิภาพเลือกดัชนี ฉันเคยเห็นสิ่งนี้ถามมาก่อนแต่ OP ไม่ได้รับการตอบรับดีเกินไป ฉันกำลังมองหาป้ายบอกทางแต่ฉันจะปรุงตัวอย่างหลอกแล้วโพสต์ตัวอย่างจริงด้วย DDL, เอาท์พุท, ตัวอย่างมากมาย สมมติว่าฉันใช้ Enterprise 2008+ เข้าใจ with(noexpand) ตัวอย่างหลอก ใช้ตัวอย่างปลอมนี้: ฉันสร้างมุมมองที่มี 22 ตัวกรองตัวกรอง 17 ตัวและม้าวงเวียนที่ตัดแถวตารางจำนวน 10 ล้านแถว มุมมองนี้มีราคาแพง (ใช่ด้วยทุน E) ที่จะทำให้เป็นจริง ฉันจะวางแผนและสร้างดัชนีมุมมอง SELECT a,b FROM AnIndexedView WHERE theClusterKeyField < 84จากนั้น ในตรรกะของเครื่องมือเพิ่มประสิทธิภาพที่ทำให้ฉันมีการเชื่อมต่อที่ขีดเส้นใต้ ผลลัพธ์: ไม่มีคำแนะนำ: 4825 อ่าน 720 แถว 47 cpu มากกว่า 76ms และราคาต้นไม้ย่อยโดยประมาณ 0.30523 …

3
มีเหตุผลในการอัปเดตสถิติด้วยตนเองหรือไม่
ใน SQL Server สถิติจะถูกอัพเดตโดยอัตโนมัติเมื่อAuto Update Statisticsอยู่ในTrue(ซึ่งเป็นค่าเริ่มต้น) มีเหตุผลในการอัปเดตสถิติด้วยตนเองและในสถานการณ์ใดบ้าง

5
สร้างคำแนะนำแผนเพื่อแคช (ผลการสปูลขี้เกียจ) CTE
ปกติแล้วฉันจะสร้างคำแนะนำแผนโดยการสร้างแบบสอบถามที่ใช้แผนที่ถูกต้องและคัดลอกไปยังแบบสอบถามที่คล้ายกันซึ่งไม่ได้ อย่างไรก็ตามบางครั้งก็เป็นเรื่องยากโดยเฉพาะอย่างยิ่งหากแบบสอบถามไม่เหมือนกันทั้งหมด วิธีที่ถูกต้องในการสร้างคำแนะนำแผนคืออะไร? SQLKiwi ได้กล่าวถึงการร่างแผนใน SSIS มีวิธีหรือเครื่องมือที่มีประโยชน์เพื่อช่วยในการจัดทำแผนดีสำหรับ SQL Server หรือไม่? ตัวอย่างที่เป็นปัญหาคือ CTE: SQLFiddle with cte(guid,other) as ( select newid(),1 union all select newid(),2 union all select newid(),3) select a.guid, a.other, b.guid guidb, b.other otherb from cte a cross join cte b order by a.other, b.other; มีวิธีใดบ้างที่จะทำให้ผลลัพธ์นั้นมี 3 guids ที่แตกต่างกันและไม่มีอีกต่อไป? ฉันหวังว่าจะสามารถตอบคำถามได้ดีขึ้นในอนาคตโดยรวมถึงคำแนะนำแผนกับแบบสอบถามชนิด …
19 sql-server  t-sql  cte 

5
SQL: INSERT มีอะไรช้าลงถ้าไม่ใช่ CPU หรือ IO
เรามีฐานข้อมูลสำหรับผลิตภัณฑ์ที่เขียนหนัก เราเพิ่งซื้อเครื่องเซิร์ฟเวอร์ใหม่พร้อม SSD เพื่อช่วย ด้วยความประหลาดใจของเราการแทรกไม่เร็วกว่าบนเครื่องเก่าของเราที่มีการจัดเก็บช้ากว่ามาก ในระหว่างการเปรียบเทียบเราสังเกตเห็นว่าอัตรา IO ที่แสดงโดยกระบวนการ SQL Server นั้นต่ำมาก ตัวอย่างเช่นฉันรันสคริปต์ที่พบในหน้านี้ยกเว้นว่าฉันได้เพิ่ม BEGIN TRAN และ COMMIT รอบลูป ที่ดีที่สุดฉันจะเห็นการใช้งานดิสก์ถึง 7Mb / s ในขณะที่ CPU แทบจะไม่ได้สัมผัส 5% เซิร์ฟเวอร์มีการติดตั้ง 64Gb และใช้ 10 เวลาการทำงานทั้งหมดคือ 2 นาที 15 วินาทีสำหรับการโทรครั้งแรกจนถึงประมาณ 1 นาทีสำหรับการโทรครั้งต่อไป ฐานข้อมูลเป็นการกู้คืนอย่างง่ายและไม่ได้ใช้งานในระหว่างการทดสอบ ฉันวางโต๊ะระหว่างการโทรแต่ละครั้ง ทำไมสคริปต์ง่าย ๆ นี้ถึงช้าจัง ฮาร์ดแวร์แทบจะไม่มีการใช้เลย ทั้งเครื่องมือการเปรียบเทียบดิสก์เฉพาะและ SQLIO ระบุว่า SSD ทำงานอย่างถูกต้องด้วยความเร็วสูงกว่า 500Mb / s …

4
ฐานข้อมูล SQL Server บน SSD - มีประโยชน์กับไฟล์แยกกันสำหรับทุกตารางหรือไม่?
ฉันกำลังสร้างฐานข้อมูลที่จะมีประมาณ 30 ตารางโดยทุกตารางมีจำนวนแถวหลายสิบล้านแถวและแต่ละตารางมีคอลัมน์สำคัญเพียงคอลัมน์เดียวและคอลัมน์คีย์หลัก / หลักต่างประเทศเพื่อเพิ่มประสิทธิภาพการสืบค้นสูงสุด อัพเดตและการแทรกและใช้ประโยชน์อย่างมากของดัชนีคลัสเตอร์ ตารางสองตารางจะมีข้อมูลที่เป็นข้อความที่มีความยาวผันแปรโดยหนึ่งในนั้นมีหลายร้อยล้านแถว แต่ที่เหลือจะมีเพียงข้อมูลตัวเลข เมื่อฉันต้องการบีบประสิทธิภาพออกมาจากฮาร์ดแวร์ที่มีอยู่ (เช่น RAM 64GB, SSD ที่เร็วมากและ 16 คอร์) ฉันคิดว่าจะอนุญาตให้แต่ละตารางมีไฟล์ของตัวเองได้ ฉันกำลังเข้าร่วมใน 2, 3, 4, 5 หรือมากกว่าตารางแต่ละตารางจะถูกอ่านโดยใช้เธรดแยกต่างหากและโครงสร้างของแต่ละไฟล์จะได้รับการจัดตำแหน่งอย่างใกล้ชิดกับเนื้อหาของตารางซึ่งหวังว่าจะช่วยลดการกระจายตัวและทำให้เร็วขึ้น สำหรับ SQL Server เพื่อเพิ่มเนื้อหาของตารางใดก็ตาม หนึ่งข้อแม้ผมติดอยู่ใน SQL Server 2008 R2 Web Edition ซึ่งหมายความว่าฉันไม่สามารถใช้การแบ่งพาร์ติชันในแนวนอนอัตโนมัติซึ่งเป็นกฎที่ออกมาเป็นการยกระดับประสิทธิภาพ จะใช้หนึ่งไฟล์ต่อตารางจริง ๆ แล้วเพิ่มประสิทธิภาพหรือไม่หรือฉันกำลังมองหาคุณลักษณะเอ็นจิน SQL Server ในตัวที่จะทำให้ซ้ำซ้อน? ข้อที่สองถ้าใช้ไฟล์หนึ่งไฟล์ต่อหนึ่งตารางจะได้เปรียบทำไมcreate tableฉันถึงให้ตัวเลือกในการจัดสรรตารางให้กับกลุ่มไฟล์และไม่ใช่เฉพาะไฟล์โลจิคัล? สิ่งนี้จะทำให้ฉันต้องสร้างกลุ่มไฟล์แยกต่างหากสำหรับทุกไฟล์ในสถานการณ์ของฉันซึ่งแนะนำให้ฉันทราบว่าบางที SQL Server อาจไม่ได้มองเห็นถึงข้อดีที่ฉันสมมติว่าจะมาจากการทำสิ่งที่ฉันเสนอ

5
การบังคับใช้ความถูกต้องของฐานข้อมูล
สิ่งนี้จะสมเหตุสมผลหรือไม่ที่จะให้แอปพลิเคชั่นบังคับใช้ความถูกต้องของฐานข้อมูลแทนการมีคีย์ต่างประเทศตรวจสอบข้อ จำกัด ฯลฯ การปรับปรุงประสิทธิภาพเท่าไหร่ที่สามารถคาดหวังว่าจะไม่บังคับใช้ความถูกต้องของฐานข้อมูลผ่านเครื่องมือฐานข้อมูลภายใน

9
การควบคุมเวอร์ชันสำหรับวัตถุฐานข้อมูล
ฐานข้อมูลที่นักพัฒนาซอฟต์แวร์ของเรากำลังทำงานนั้นมีขนาดใหญ่เกินไป (มีวัตถุฐานข้อมูลจำนวนมาก) เราต้องควบคุมการเปลี่ยนแปลงวัตถุ db (การจัดการการเปลี่ยนแปลง) บริษัท ของเราไม่สามารถมีบุคคลที่รับผิดชอบการเปลี่ยนแปลงฐานข้อมูลเท่านั้น ดังนั้นเราต้องการซอร์สที่ปลอดภัยสำหรับวัตถุฐานข้อมูลบางอย่างเช่นการควบคุมเวอร์ชันสำหรับรหัสมาตรฐาน แต่เกี่ยวข้องกับฐานข้อมูลมากกว่านั้นที่สามารถซิงโครไนซ์ฐานข้อมูลและสคริปต์ อะไรคือสิ่งที่ดีที่สุด เชื่อถือได้ราคาถูกใช้งานได้ - เลือกได้สองแบบ :)

2
เหตุใดการสร้างดัชนีใหม่นี้จึงปรับปรุงประสิทธิภาพมากขึ้นเมื่อดัชนีที่มีอยู่รวมคอลัมน์ทั้งหมดในดัชนีใหม่
ฉันมีตารางบันทึกและ LogItem ฉันกำลังเขียนแบบสอบถามเพื่อดึงข้อมูลจากทั้งสองอย่าง มีหลายพันLogsและแต่ละคนLogสามารถมีได้มากถึง 125LogItems คำถามที่ถามมีความซับซ้อนดังนั้นฉันจึงข้ามมัน (ถ้ามีคนคิดว่ามันเป็นสิ่งสำคัญที่ฉันสามารถโพสต์ได้) แต่เมื่อฉันรันแผนแบบสอบถาม SSMS โดยประมาณมันบอกฉันว่าดัชนีที่ไม่เป็นคลัสเตอร์ใหม่จะปรับปรุงประสิทธิภาพได้สูงสุด 100% . Existing Index: Non-clustered Key Colums (LogItem): ParentLogID, DateModified, Name, DatabaseModified Query Plan Recommendation CREATE NONCLUSTERED INDEX [LogReportIndex] ON [dbo].[LogItem] ([ParentLogID],[DatabaseModified]) เพียงเพื่อความสนุกฉันสร้างดัชนีใหม่นี้และเรียกใช้คิวรีและสร้างความประหลาดใจให้กับฉันมากตอนนี้ใช้เวลาประมาณ 1 วินาทีในการเรียกใช้คิวรีของฉันก่อนที่จะนานกว่า 10 วินาที ฉันคิดว่าดัชนีที่มีอยู่ของฉันจะครอบคลุมแบบสอบถามใหม่นี้ดังนั้นคำถามของฉันคือเหตุผลที่สร้างดัชนีใหม่ในคอลัมน์เดียวที่ใช้ในแบบสอบถามใหม่ของฉันปรับปรุงประสิทธิภาพหรือไม่ ฉันควรมีดัชนีสำหรับชุดค่าผสมที่ไม่ซ้ำกันของคอลัมน์ที่ใช้ในส่วนwhereคำสั่งของฉันหรือไม่? หมายเหตุ: ฉันไม่คิดว่านี่เป็นเพราะ SQL Server กำลังแคชผลลัพธ์ของฉันฉันรันเคียวรีประมาณ 25-30 ครั้งก่อนที่ฉันจะสร้างดัชนีและใช้เวลาประมาณ 10-15 วินาทีหลังจากดัชนีตอนนี้สอดคล้องกัน ~ 1 …
19 sql-server  index 

4
แสดงแถวที่แตกต่างระหว่างสองตารางหรือคิวรีได้อย่างง่ายดาย
ลองนึกภาพคุณมีสองตาราง / แบบสอบถามที่แตกต่างกันที่ควรจะมี / ส่งคืนข้อมูลที่เหมือนกัน คุณต้องการตรวจสอบสิ่งนี้ วิธีง่ายๆในการแสดงแถวที่ไม่ตรงกันจากแต่ละตารางเหมือนกับตัวอย่างด้านล่างคือการเปรียบเทียบทุกคอลัมน์ สมมติว่ามี 30 คอลัมน์ในตารางซึ่งหลายแห่งเป็น NULLable เมื่อไม่มี PK หรืออาจมีการทำซ้ำต่อ PK การเข้าร่วมในคอลัมน์ PK เพียงอย่างเดียวไม่เพียงพอและจะเป็นความหายนะที่จะต้องทำการเข้าร่วมแบบเต็มโดยมีเงื่อนไขการเข้าร่วม 30 รายการที่จัดการ NULL ได้อย่างเหมาะสมรวมถึงเงื่อนไขที่น่ารังเกียจ เพื่อยกเว้นแถวที่ตรงกัน โดยปกติแล้วคือเมื่อฉันเขียนแบบสอบถามใหม่กับข้อมูลที่ไม่มีการ unscrbed หรือไม่เข้าใจว่าปัญหานั้นเลวร้ายที่สุดและความน่าจะเป็นของ PK ที่มีอยู่ในเชิงตรรกะนั้นต่ำมาก ฉันทำสองวิธีที่แตกต่างกันเพื่อแก้ไขปัญหาแล้วเปรียบเทียบผลลัพธ์ของพวกเขาความแตกต่างที่เน้นกรณีพิเศษในข้อมูลที่ฉันไม่ทราบ ผลลัพธ์ต้องมีลักษณะดังนี้: Which Col1 Col2 Col3 ... Col30 ------ ------ ------ ------ ------ TableA Cat 27 86 -- mismatch TableB Cat 27 …

6
วิธีการป้องกันไม่ให้บันทึกธุรกรรมเต็มระหว่างการจัดระเบียบดัชนีใหม่
เรามีหลายเครื่องที่เราได้จัดสรรขนาดของบันทึกการทำธุรกรรมไว้ที่ 50GB ขนาดของตารางที่ฉันพยายามจัดระเบียบใหม่คือ 55 - 60 gb แต่จะเพิ่มขึ้นอย่างต่อเนื่อง เหตุผลหลักที่ฉันต้องการจัดระเบียบใหม่คือการเรียกคืนพื้นที่และผลประโยชน์ใด ๆ เนื่องจากเป็นโบนัสเพิ่มเติม ระดับการแตกแฟรกเมนต์ของตารางคือ 30 - 35% ในเครื่องเหล่านี้บางเครื่องฉันได้รับข้อผิดพลาด "transaction log full" และการจัดระเบียบใหม่ล้มเหลว ขนาดบันทึกธุรกรรมสูงสุดถึง 48gb เป็นวิธีที่ดีในการตอบโต้สิ่งนี้คืออะไร? เราไม่ได้เปิดการเพิ่มอัตโนมัติและฉันลังเลที่จะทำเช่นนั้น ฉันสามารถเพิ่มขนาดบันทึกเป็นค่าที่มากขึ้น แต่เมื่อขนาดตารางเพิ่มขึ้นในอนาคตค่าอาจไม่เพียงพอ นอกจากนี้ยังเอาชนะวัตถุประสงค์ในการจัดระเบียบใหม่เพื่อเรียกคืนพื้นที่ถ้าฉันจะเพิ่มขนาดบันทึกอย่างเท่าเทียมกัน ความคิดเห็นใด ๆ เกี่ยวกับวิธีที่ฉันสามารถตอบโต้เรื่องนี้ได้อย่างมีประสิทธิภาพ การใช้โหมดแบบกลุ่มไม่ใช่ตัวเลือกเนื่องจากการสูญเสียข้อมูลไม่เป็นที่ยอมรับ

4
เป็นไปได้ในการสำรองและกู้คืนส่วนหนึ่งของฐานข้อมูลใน sql-server หรือไม่?
เรามีฐานข้อมูล SQL Server 2005 ที่เราถ่ายโอนจากเว็บไซต์ลูกค้าของเราเป็นประจำ การดำเนินการนี้ใช้เวลานานเนื่องจากเราไม่มีการเชื่อมต่อโดยตรงและต้องโอนไฟล์ผ่านแอปพลิเคชันการถ่ายโอนไฟล์ผ่านเว็บ ฐานข้อมูลปัจจุบันมีขนาดประมาณ 10GB แต่เราไม่ต้องการข้อมูลทั้งหมด - ส่วนใหญ่อยู่ในตารางตรวจสอบและตารางที่เก็บค่าที่คำนวณได้ซึ่งสามารถสร้างขึ้นใหม่ได้ ฉันดูที่การสร้างกลุ่มไฟล์เพื่อเก็บตารางการตรวจสอบและหวังว่าฉันจะสำรองและกู้คืนกลุ่มไฟล์หลักได้ ฉันสามารถสำรองข้อมูลได้ดี แต่เมื่อกู้คืนฉันพบข้อผิดพลาดแจ้งว่าฉันไม่ได้กู้คืนไปยังฐานข้อมูลเดียวกัน เป็นไปได้หรือไม่ที่จะกู้คืนส่วนหนึ่งของฐานข้อมูลไปยังเซิร์ฟเวอร์อื่นโดยใช้กลุ่มไฟล์? มีวิธีที่ดีกว่าในการทำเช่นนี้?

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