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

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

6
วิธีตรวจสอบ EXISTS อย่างมีประสิทธิภาพในหลาย ๆ คอลัมน์?
นี่เป็นปัญหาที่ฉันคิดขึ้นมาเป็นระยะและยังไม่พบทางออกที่ดีสำหรับ เผื่อว่าโครงสร้างตารางต่อไปนี้ CREATE TABLE T ( A INT PRIMARY KEY, B CHAR(1000) NULL, C CHAR(1000) NULL ) และข้อกำหนดคือการพิจารณาว่าคอลัมน์ใดคอลัมน์หนึ่งที่มีค่าว่างBหรือCมีNULLค่าใด ๆ(และถ้าเป็นเช่นนั้น) นอกจากนี้สมมติว่าตารางมีแถวนับล้านแถว (และไม่มีสถิติคอลัมน์ที่สามารถมองได้เนื่องจากฉันสนใจวิธีแก้ปัญหาทั่วไปสำหรับคิวรีประเภทนี้) ฉันสามารถคิดถึงวิธีการไม่กี่ทางที่จะเข้าใกล้สิ่งนี้ แต่ทุกคนก็มีจุดอ่อน EXISTSงบสองแยก นี่จะมีข้อดีของการอนุญาตให้แบบสอบถามหยุดสแกนเร็วที่สุดเท่าที่NULLจะพบ แต่ถ้าในความเป็นจริงไม่มีทั้งคอลัมน์ทั้งNULLสองการสแกนแบบเต็มจะส่งผลให้ แบบสอบถามรวมครั้งเดียว SELECT MAX(CASE WHEN B IS NULL THEN 1 ELSE 0 END) AS B, MAX(CASE WHEN C IS NULL THEN 1 ELSE 0 END) …

2
จะรู้ได้อย่างไรว่าเมื่อไหร่ที่ฉันมีดัชนีมากเกินไป
ใช้ Microsoft SQL Server Profiler ทุกครั้งจากนั้นแนะนำฉันด้วยดัชนีและสถิติใหม่ ๆ ที่จะสร้าง ("... 97% การปรับปรุงโดยประมาณ ... ") จากความเข้าใจของฉันทุกดัชนีเพิ่มสามารถทำให้SELECTแบบสอบถามSQL ได้เร็วขึ้น แต่ยังUPDATEหรือINSERTแบบสอบถามช้าลงเนื่องจากดัชนีจะต้องมีการปรับ สิ่งที่ฉันสงสัยคือเมื่อฉันมีดัชนี / สถิติ "มากเกินไป" อาจจะไม่มีคำตอบที่ชัดเจนเกี่ยวกับเรื่องนี้ แต่บางกฎของหัวแม่มือ

5
การเก็บถาวรข้อมูลเก่า
ขณะนี้เรากำลังประสบปัญหาด้านประสิทธิภาพเนื่องจากฐานข้อมูลของเรามีขนาดใหญ่เกินไป มีข้อมูลที่จัดเก็บจาก 10 ปีที่ผ่านมาและฉันไม่เห็นเหตุผลที่ข้อมูลเก่ากว่า 2 ปีจะต้องถูกเก็บไว้ในตารางเดียวกับข้อมูลใหม่ ตอนนี้เนื่องจากฉันไม่มีประสบการณ์อย่างลึกซึ้งในการจัดการฐานข้อมูลฉันกำลังมองหาวิธีที่ดีที่สุดในการเก็บถาวรข้อมูลเก่า ข้อมูล มีระเบียนประมาณ 310,000 รายการในฐานข้อมูลทั้งหมด ฐานข้อมูลต้องการ 250 GB บนฮาร์ดดิสก์ รุ่นของเซิร์ฟเวอร์คือ SQL Server 2008 ที่มีระดับความเข้ากันได้ของ SQL Server 2005 (90) แต่เรากำลังวางแผนที่จะอัพเกรดเป็น SQL Server 2012 ในไม่ช้า ฉันคิดถึงความเป็นไปได้สองอย่าง: ฐานข้อมูลใหม่ สร้างฐานข้อมูลที่คล้ายกับฐานข้อมูลบนเซิร์ฟเวอร์ที่ใช้งานจริงและแทรกข้อมูลเก่าทั้งหมดลงในฐานข้อมูลใหม่ ข้อเสีย: เนื่องจากเซิร์ฟเวอร์ที่เชื่อมโยงไม่ได้รับอนุญาตในสภาพแวดล้อมของเราจึงเป็นการยากที่จะเข้าร่วมข้อมูลเก่าหากจำเป็น ประวัติความเป็นมา สร้าง schema fe [hist] ใหม่ด้วยตารางเดียวกันกับในฐานข้อมูลการผลิต แทรกข้อมูลเก่าทั้งหมดในตารางใหม่เหล่านี้ในสคีมาใหม่ ข้อได้เปรียบ: การเข้าร่วมง่ายหากต้องการข้อมูลเก่าในอนาคต คุณเป็นหนึ่งในโซลูชันที่เหนือกว่าอีกหรือไม่ ทำไม? มีความเป็นไปได้ที่ดีกว่านี้ไหม? มีเครื่องมือที่เป็นไปได้ที่จะทำภารกิจนี้ได้อย่างง่ายดายหรือไม่? ความคิดอื่น ๆ ? …

7
พยายามค้นหาครั้งล่าสุดที่มีการเปลี่ยนแปลงค่า
ฉันมีตารางที่มี ID ค่าและวันที่ มี ID, ค่าและวันที่จำนวนมากในตารางนี้ บันทึกจะถูกแทรกลงในตารางนี้เป็นระยะ ID จะยังคงเหมือนเดิม แต่บางครั้งค่าจะเปลี่ยน ฉันจะเขียนคิวรีที่จะให้ ID พร้อมกับเวลาที่มีการเปลี่ยนแปลงค่าล่าสุดได้อย่างไร หมายเหตุ: ค่าจะเพิ่มขึ้นเสมอ จากข้อมูลตัวอย่างนี้: Create Table Taco ( Taco_ID int, Taco_value int, Taco_date datetime) Insert INTO Taco Values (1, 1, '2012-07-01 00:00:01'), (1, 1, '2012-07-01 00:00:02'), (1, 1, '2012-07-01 00:00:03'), (1, 1, '2012-07-01 00:00:04'), (1, 2, '2012-07-01 00:00:05'), …

3
รหัสเพื่อจำลองการหยุดชะงัก
ฉันกำลังทดสอบแอปพลิเคชันของฉันฉันต้องการรหัสบางอย่างที่เสถียรจำลองการหยุดชะงักบนเว็บไซต์ฐานข้อมูล (สคริปต์ sql ถ้าเป็นไปได้) ขอขอบคุณ. เพิ่ม: สร้าง deadlock ที่เกี่ยวข้องกับตารางเดียวเท่านั้น

2
เหตุใดแบบสอบถามย่อยจึงลดการประมาณแถวเป็น 1
พิจารณาแบบสอบถามที่ประดิษฐ์ แต่เรียบง่ายต่อไปนี้: SELECT ID , CASE WHEN ID <> 0 THEN (SELECT TOP 1 ID FROM X_OTHER_TABLE) ELSE (SELECT TOP 1 ID FROM X_OTHER_TABLE_2) END AS ID2 FROM X_HEAP; ฉันคาดว่าการประมาณการแถวสุดท้ายสำหรับเคียวรีนี้จะเท่ากับจำนวนแถวในX_HEAPตาราง สิ่งที่ฉันทำในแบบสอบถามย่อยไม่ควรสำคัญกับการประมาณแถวเพราะมันไม่สามารถกรองแถวใด ๆ ออกได้ อย่างไรก็ตามใน SQL Server 2016 ฉันเห็นการประมาณแถวลดลงเป็น 1 เนื่องจากแบบสอบถามย่อย: ทำไมสิ่งนี้ถึงเกิดขึ้น ฉันจะทำอะไรได้บ้าง มันง่ายมากที่จะทำซ้ำปัญหานี้ด้วยไวยากรณ์ที่ถูกต้อง นี่คือคำจำกัดความของตารางหนึ่งชุดที่จะทำ: CREATE TABLE dbo.X_HEAP (ID INT NOT …

8
ทำไมจึงเป็นการดีที่จะอนุญาตให้ทุกคนใช้การเข้าสู่ระบบ sa
แม้แต่ Microsoft ไม่สนับสนุนการใช้โหมดการรับรองความถูกต้องของ SQL Serverแต่แอปพลิเคชันของเราต้องการ ฉันได้อ่านว่าเป็นวิธีปฏิบัติที่ดีที่สุดที่จะไม่อนุญาตให้ผู้ใช้ใช้การsaเข้าสู่ระบบโดยตรงแทนการใช้ Windows Authentication และการอนุญาตสิทธิ์ดูแลระบบบัญชี (หรือกลุ่มบัญชี) เหล่านั้น นั่นไม่ใช่สิ่งเดียวกัน ข้อดี / ข้อเสียคืออะไร? แนวปฏิบัติที่เหมาะสมที่สุดเพิ่มความปลอดภัยของอินสแตนซ์ SQL Server ของฉันได้อย่างไร สิ่งนี้ใช้ได้กับอินสแตนซ์การผลิตหรือกับอินสแตนซ์การพัฒนาภายในของเราด้วยหรือไม่

1
SQL Server 2017 ล้มเหลวเมื่อสำรองข้อมูลเนื่องจาก filepath ไม่ถูกต้อง
ฉันพยายามกู้คืนฐานข้อมูลและ SQL Server หยุดทำงาน ฉันจะได้รับข้อความใน SSMS ที่กล่าวว่ามีข้อผิดพลาดในการส่งผ่านเครือข่าย (การเชื่อมต่อลดลงเมื่อเกิดข้อผิดพลาด) ฉันตรวจสอบบันทึกและพบว่าไม่มีอะไรมากไปกว่า SQL Server ปิดโดยไม่คาดหมาย ฉันจะต้องไปและเริ่มบริการใหม่ ฉันลดปัญหาให้แคบลงจนถึงสคริปต์ที่ GUI พยายามเรียกใช้ ปัญหาคือเมื่อมันทำการสำรองหางบันทึกเส้นทางไปยังแฟ้มสำรองข้อมูลไม่ถูกต้อง มันควรจะเป็นD:\mapbenefits\... BACKUP LOG [mapbenefits] TO DISK = N'D:mapbenefits_LogBackup_2019-02-21_13-58-24.bak' WITH NOFORMAT, NOINIT, NAME = N'mapbenefits_LogBackup_2019-02-21_13-58-24', NOSKIP, NOREWIND, NOUNLOAD, NORECOVERY , STATS = 5 ฉันมีสองคำถาม ฉันจะแก้ไขเส้นทางนี้ได้อย่างไร ฉันพยายามไปที่การตั้งค่าเซิร์ฟเวอร์และเส้นทางการสำรองข้อมูลD:โดยไม่มีเครื่องหมายทับ ถ้าฉันเพิ่มเครื่องหมายสแลช gui จะลบออก นี่คือ SSMS v17.9.1 ฉันสามารถเลือกD:\mapbenefits\และใช้งานได้ แต่ฉันต้องการD:\DATABASE\... …

3
Management Studio ถูกลบออกจากสื่อการติดตั้ง SQL Server 2016 หรือไม่
ฉันเพิ่งลองติดตั้ง SQL Server 2016 Enterprise แต่ฉันสังเกตว่า Management Studio ไม่ได้ติดตั้งตามค่าเริ่มต้น ฉันยังสังเกตเห็นว่ามีลิงก์แยกต่างหากไปยัง SSMS ในคู่มือการติดตั้งซึ่งชี้ไปที่https://msdn.microsoft.com/en-us/library/mt238290.aspx เหตุผลในการตัดสินใจครั้งนี้คืออะไร? ต่อไปนี้ถูกบันทึกไว้ใน URL ด้านบน: SSMS รุ่นที่มีให้โดยทั่วไปนี้ให้บริการฟรีและไม่ต้องการสิทธิ์ใช้งาน SQL Server เพื่อติดตั้งและใช้งาน บางทีนี่มัน?
25 sql-server  ssms 

1
ลำดับ - ไม่มีแคชเทียบกับ CACHE 1
มีความแตกต่างระหว่างการSEQUENCEประกาศใช้NO CACHEและประกาศใช้CACHE 1ใน SQL Server 2012+? ลำดับ # 1: CREATE SEQUENCE dbo.MySeqCache1 AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE CACHE 1; GO ลำดับ # 2: CREATE SEQUENCE dbo.MySeqNoCache AS INT START WITH 1 INCREMENT BY 1 MINVALUE 1 MAXVALUE 9999 NO CYCLE NO …

4
ฉันควรอัปเดตอย่างชัดเจนไปยังคอลัมน์ที่ไม่ควรอัปเดตหรือไม่
ฉันคุ้นเคยกับการทำงานในสภาพแวดล้อมที่ปลอดภัยและดังนั้นฉันจึงออกแบบการอนุญาตของฉันให้ดีมาก สิ่งหนึ่งที่ฉันทำตามปกติคือDENYผู้ใช้สามารถระบุUPDATEคอลัมน์ที่ไม่ควรอัปเดตได้อย่างชัดเจน ตัวอย่างเช่น: create table dbo.something ( created_by varchar(50) not null, created_on datetimeoffset not null ); คอลัมน์สองเหล่านี้ไม่ควรเปลี่ยนแปลงเมื่อมีการตั้งค่า ดังนั้นผมจะชัดเจนรับอนุญาตเกี่ยวกับพวกเขาDENYUPDATE เมื่อเร็ว ๆ นี้ในระหว่างการประชุมทีมนักพัฒนาได้ยกประเด็นที่ตรรกะเพื่อให้แน่ใจว่าเขตข้อมูลที่ไม่เคยได้รับการปรับปรุงควรจะอยู่ในเลเยอร์แอปพลิเคชันและไม่ใช่ชั้นฐานข้อมูลในกรณีที่ "พวกเขาจำเป็นต้องปรับปรุงค่า สำหรับฉันแล้วดูเหมือนว่าความคิด dev ทั่วไป (ฉันรู้ว่าฉันเคยเป็นหนึ่ง!) ฉันเป็นสถาปนิกอาวุโสที่ บริษัท ของฉันและฉันได้ทำงานตามหลักการของสิทธิพิเศษจำนวนน้อยที่สุดที่ต้องใช้เพื่อให้แอปทำงานได้ สิทธิ์ทั้งหมดจะได้รับการตรวจสอบเป็นประจำ แนวปฏิบัติที่ดีที่สุดในสถานการณ์นี้คืออะไร?

4
ไอคอนสีน้ำเงินพร้อมเครื่องหมายคำถามหมายความว่าอะไร
อินสแตนซ์ของ SQL Server นั้นสามารถเข้าถึงได้และดูเหมือนว่าจะใช้ได้ Microsoft SQL Server 2016 (SP1-CU2) (KB4013106) - 13.0.4422.0 (X64) 6 มีนาคม 2017 14:18:16 ลิขสิทธิ์ (c) Microsoft Corporation รุ่นองค์กรองค์กร (64 บิต) บน Windows Server 2012 R2 มาตรฐาน 6.3 (รุ่น 9600) :) (Hypervisor) แต่เครื่องหมายคำถามสีขาวมีความหมายว่าอย่างไร ไอคอนเหล่านี้ไม่หายไปเมื่อฉันรีเฟรช ฉันดูแลระบบภายในเซิร์ฟเวอร์ sql และภายนอกฉันเป็นผู้ดูแลระบบในกล่องนั้น อีกสิ่งที่ฉันสังเกตเห็นคุณสามารถดูในภาพด้านล่าง เหล่านี้เป็น 2 เซสชันการจัดการสตูดิโอที่แตกต่างกัน ด้านบนหนึ่งผมกำลังเข้าสู่ระบบเป็นตัวเองDBA and sysadminในหนึ่งวินาทีผมใช้ Studio จัดการกับและฉันจะใช้บัญชีโดเมนที่จะใช้สำหรับการจำลองแบบซึ่งไม่ได้เป็นrun as …

3
พฤติกรรมแปลก ๆ พร้อมขนาดตัวอย่างสำหรับการอัพเดทสถิติ
ฉันได้รับการตรวจสอบเกณฑ์การสุ่มตัวอย่างด้วยการปรับปรุงสถิติใน SQL Server (2012) และสังเกตเห็นพฤติกรรมที่น่าสงสัย โดยทั่วไปจำนวนแถวตัวอย่างที่ดูเหมือนจะแตกต่างกันภายใต้สถานการณ์บางอย่าง - แม้จะมีชุดข้อมูลเดียวกัน ฉันเรียกใช้แบบสอบถามนี้: --Drop table if exists IF (OBJECT_ID('dbo.Test')) IS NOT NULL DROP TABLE dbo.Test; --Create Table for Testing CREATE TABLE dbo.Test(Id INT IDENTITY(1,1) CONSTRAINT PK_Test PRIMARY KEY CLUSTERED, TextValue VARCHAR(20) NULL); --Insert enough data so we have more than 8Mb (the threshold at …

2
เปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL - เกิดอะไรขึ้นภายใต้ประทุน?
เรามีตารางที่มีแถว 2.3B อยู่ เราต้องการเปลี่ยนคอลัมน์จาก NOT NULL เป็น NULL คอลัมน์มีอยู่ในหนึ่งดัชนี (ไม่ใช่ดัชนีแบบคลัสเตอร์หรือ PK) ชนิดข้อมูลไม่เปลี่ยนแปลง (เป็น INT) เพียงความไร้ค่า คำสั่งดังต่อไปนี้: Alter Table dbo.Workflow Alter Column LineId Int NULL การดำเนินการใช้เวลาเกินกว่า 10 ก่อนที่เราจะหยุดมัน (เรายังไม่ปล่อยให้มันทำงานจนเสร็จเพราะมันเป็นการปิดกั้นและใช้เวลานานเกินไป) เราอาจคัดลอกตารางไปยังเซิร์ฟเวอร์ dev เพื่อทดสอบว่าใช้เวลานานเท่าใด แต่ฉันอยากรู้ถ้าใครรู้ว่าสิ่งที่ SQL Server ทำภายใต้ประทุนเมื่อแปลงจาก NOT NULL เป็น NULL นอกจากนี้ดัชนีที่ได้รับผลกระทบจะต้องได้รับการสร้างใหม่หรือไม่ แผนแบบสอบถามที่สร้างขึ้นไม่ได้ระบุว่าเกิดอะไรขึ้น ตารางในคำถามถูกทำคลัสเตอร์ (ไม่ใช่ฮีป)

4
เป็นไปได้ไหมที่จะสร้างหนึ่งคอลัมน์แบบอ่านอย่างเดียว?
ฉันอยากรู้ว่าเป็นไปได้ไหมที่จะสร้างตารางที่มีคอลัมน์ที่ไม่สามารถเปลี่ยนแปลงได้ แต่คอลัมน์อื่น ๆ ของตารางสามารถทำได้ เช่นฉันสามารถจินตนาการCreatedByUserคอลัมน์ที่ไม่ควรเปลี่ยนแปลง มีฟังก์ชันในตัวใน SQL Server สำหรับสิ่งนี้หรือเป็นไปได้เฉพาะผ่านทางทริกเกอร์หรืออย่างอื่นเท่านั้น
25 sql-server 

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