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

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

1
NONCLUSTERED INDEX ที่ยังไม่ได้ใช้ยังสามารถเพิ่มความเร็วการสืบค้นได้หรือไม่?
นี่เป็นสถานการณ์ที่แปลก แต่ฉันหวังว่าบางคนจะมีคำตอบ ในบางช่วงการแก้ไขปัญหาประสิทธิภาพการทำงานของเราได้เพิ่ม nonclustered INDEX sp_BlitzIndexในตารางตามที่ได้รับการร้องขอจาก เราตรวจสอบการใช้งานในวันถัดไปและพบว่ามีการอ่าน0 ครั้ง (การสแกน 0 ครั้ง / การค้นหาการค้นหาเดี่ยว 0 ครั้ง ) ดังนั้นเราจึงปิดการใช้งาน ในนาทีถัดไปเราได้รับการร้องเรียนเกี่ยวกับแอพพลิเคชั่นช้า (ปัญหาประสิทธิภาพ) ที่เราพยายามตรวจสอบและแก้ไขในตอนแรกเมื่อเราเพิ่ม INDEX ทีนี้ฉันรู้แล้วในทางทฤษฎีฟังดูเป็นเรื่องบังเอิญอย่างแท้จริง ดัชนีถูกสรรพสิ่ง, วัด, ที่ไม่ได้ใช้ ปิดการใช้งานไม่ควรทำให้ประสิทธิภาพการทำงานของแบบสอบถามลดลง แต่มันเกือบจะบังเอิญเกินไป คำถาม ดังนั้นคำถามของฉันก็เพียงพอแล้ว: มันเป็นไปได้ทุกที่ , ว่า nonclustered INDEX ซึ่งมีการใช้งานสถิติ (จาก DMVs / การsp_BlitzIndex) แสดงการใช้งาน NO ยังคงได้รับการช่วยให้ประสิทธิภาพการค้นหาบนโต๊ะอย่างใดได้รับผลกระทบหรือไม่

1
วิธีใช้ COLUMNS_UPDATED เพื่อตรวจสอบว่ามีการอัปเดตคอลัมน์ใดคอลัมน์หนึ่งหรือไม่
ฉันมีตารางที่มี 42 คอลัมน์และทริกเกอร์ซึ่งควรทำบางสิ่งเมื่อมีการอัปเดต 38 คอลัมน์เหล่านี้ ดังนั้นฉันต้องข้ามตรรกะหากส่วนที่เหลือ 4 คอลัมน์มีการเปลี่ยนแปลง ฉันสามารถใช้ฟังก์ชั่นUPDATE ()และสร้างIFเงื่อนไขที่ยิ่งใหญ่ได้แต่ต้องการทำสิ่งที่สั้นกว่า ใช้COLUMNS_UPDATEDฉันสามารถตรวจสอบว่าคอลัมน์ทั้งหมดมีการปรับปรุงได้หรือไม่ ตัวอย่างเช่นการตรวจสอบว่ามีการอัปเดตคอลัมน์ 3, 5 และ 9 หรือไม่: IF ( (SUBSTRING(COLUMNS_UPDATED(),1,1) & 20 = 20) AND (SUBSTRING(COLUMNS_UPDATED(),2,1) & 1 = 1) ) PRINT 'Columns 3, 5 and 9 updated'; ดังนั้นค่า20สำหรับคอลัมน์3และ5และค่า1สำหรับคอลัมน์9เนื่องจากถูกตั้งค่าในบิตแรกของไบต์ที่สอง หากฉันเปลี่ยนคำสั่งORเป็นจะตรวจสอบว่าคอลัมน์3และ5หรือคอลัมน์9นั้นมีการ / มีการปรับปรุง? จะใช้ORตรรกะในบริบทของหนึ่งไบต์ได้อย่างไร

4
แบบสอบถามเพื่อเลือกค่าสูงสุดเมื่อเข้าร่วม
ฉันมีตารางผู้ใช้: |Username|UserType|Points| |John |A |250 | |Mary |A |150 | |Anna |B |600 | และระดับ |UserType|MinPoints|Level | |A |100 |Bronze | |A |200 |Silver | |A |300 |Gold | |B |500 |Bronze | และฉันกำลังมองหาข้อความค้นหาเพื่อให้ได้ระดับสำหรับผู้ใช้แต่ละคน บางสิ่งบางอย่างตาม: SELECT * FROM Users U INNER JOIN ( SELECT TOP 1 Level, U.UserName FROM Levels …

3
กลุ่มโฆษณาใดเข้าสู่ระบบผู้ใช้ของฉันเป็นของ?
ฉันไม่แน่ใจว่าฉันเลือกชื่อที่ถูกต้องสำหรับคำถามนี้หรือไม่ สิ่งที่ฉันเป็นจริงหลังจากได้รับผู้ใช้โฆษณา windows แต่ละฉันต้องการค้นหารายชื่อกลุ่มโฆษณา windows (เข้าสู่ระบบ) ที่มีการเข้าถึงฐานข้อมูลเฉพาะในเซิร์ฟเวอร์นี้ เมื่อฉันเรียกใช้แบบสอบถามต่อไปนี้ select name, principal_id, type, type_desc, default_schema_name, create_date, modify_date, owning_principal_id, sid, is_fixed_role from sys.database_principals ในเซิร์ฟเวอร์ของฉัน Microsoft SQL Server 2008 R2 (SP1) - 10.50.2500.0 (X64) 17 มิถุนายน 2011 00:54:03 ลิขสิทธิ์ (c) Microsoft Corporation Standard Edition (64 บิต) บน Windows NT 6.1 (รุ่น 7601: Service …

1
ทำไมเราถึงใช้ FILE = 1 ในสคริปต์เพื่อกู้คืนฐานข้อมูล
เมื่อเร็ว ๆ นี้เมื่อฉันเจอสคริปต์เพื่อกู้คืนฐานข้อมูลฉันสงสัยว่าทำไมเราต้องใช้ " FILE = 1 "? เราไม่สามารถกู้คืนฐานข้อมูลโดยไม่มีคำสั่งนั้นได้หรือไม่! โดยพื้นฐานแล้วมันใช้ทำอะไร?

1
ทำไม UPDLOCK ทำให้ SELECT เลือกที่จะหยุด (ล็อค)?
ฉันมีตัวเลือกใน SQL Server ที่ล็อคทั้งตาราง นี่คือสคริปต์การตั้งค่า (ตรวจสอบให้แน่ใจว่าคุณไม่ได้เขียนทับอะไรเลย) USE [master] GO IF EXISTS(SELECT 1 FROM sys.databases d WHERE d.name = 'LockingTestDB') DROP DATABASE LockingTestDB GO CREATE DATABASE LockingTestDB GO USE [LockingTestDB] GO IF EXISTS(SELECT 1 FROM sys.tables t WHERE t.name = 'LockingTestTable') DROP TABLE LockingTestTable GO CREATE TABLE LockingTestTable ( Id int …

1
ทำไมดัชนีการเลือกรองไม่ได้ใช้เมื่อตัวกรองส่วนคำสั่ง where บน value () `?
ติดตั้ง: create table dbo.T ( ID int identity primary key, XMLDoc xml not null ); insert into dbo.T(XMLDoc) select ( select N.Number for xml path(''), type ) from ( select top(10000) row_number() over(order by (select null)) as Number from sys.columns as c1, sys.columns as c2 ) as N; ตัวอย่าง XML …

1
วิธีแก้ไข RESOURCE_SEMAPHORE และ RESOURCE_SEMAPHORE_QUERY_COMPILE ประเภทการรอ
เรากำลังพยายามหาสาเหตุของการทำงานของ sql server ที่ทำงานช้าการสืบค้น / การดึงข้อมูลจากหนึ่งในฐานข้อมูลขนาด 300 GB โฮสต์บนเซิร์ฟเวอร์ด้วยการกำหนดค่าด้านล่าง: เซิร์ฟเวอร์ Windows 2003 R2, SP2, Enterprise Edition, RAM 16 GB, 12 CPU'S 32 บิต SQL Server 2005, SP4, Enterprise Edition, 32 บิต เราได้แจ้งธุรกิจเกี่ยวกับการอัปเกรดเป็น 64 บิตซึ่งจะใช้เวลามากกว่าหนึ่งเดือน แต่สำหรับปัญหาปัจจุบันเราพยายามรวบรวมข้อมูลถ้าเราสามารถแก้ไขความกดดันของหน่วยความจำหรือในที่สุดก็มาถึงข้อสรุปเพื่อเพิ่มแรม การดำเนินการเสร็จสิ้น: การจัดทำดัชนีและอัพเดตสถานะใหม่นั้นเหมาะสมสำหรับฐานข้อมูล ดังที่แสดงไว้ด้านล่างเราได้สังเกตสัญญาณเซมาฟอร์เป็นเวลา 5 วันที่ผ่านมาวิ่งในช่วงเวลาโหลด: ข้อมูลน้อยหลังจากแบบสอบถามด้านล่าง: ขนาดของบัฟเฟอร์ = 137272 SELECT SUM(virtual_memory_committed_kb) FROM sys.dm_os_memory_clerks WHERE type='MEMORYCLERK_SQLBUFFERPOOL' …

1
เครื่องมือเพิ่มประสิทธิภาพของ SQL Server ประมาณจำนวนแถวในตารางที่เข้าร่วมอย่างไร
ฉันใช้คำค้นหานี้ในฐานข้อมูลAdventureWorks2012 : SELECT s.SalesOrderID, d.CarrierTrackingNumber, d.ProductID, d.OrderQty FROM Sales.SalesOrderHeader s JOIN Sales.SalesOrderDetail d ON s.SalesOrderID = d.SalesOrderID WHERE s.CustomerID = 11077 ถ้าฉันดูแผนการดำเนินการโดยประมาณฉันจะเห็นสิ่งต่อไปนี้: การค้นหาดัชนีเริ่มต้น (ด้านบนขวา) ใช้ดัชนี IX_SalesOrderHeader_CustomerID และค้นหาตามตัวอักษร 11077 โดยมีค่าประมาณ 2.6192 แถว ถ้าฉันใช้DBCC SHOW_STATISTICS ('Sales.SalesOrderHeader', 'IX_SalesOrderHeader_CustomerID') WITH HISTOGRAMมันแสดงว่าค่า 11077 อยู่ระหว่างสองคีย์ตัวอย่าง 11019 และ 11091 จำนวนเฉลี่ยของแถวที่แตกต่างระหว่าง 11019 และ 11091 คือ 2.619718 หรือปัดเศษเป็น 2.61972 …

2
การอัพเดตดัชนีเซิร์ฟเวอร์ SQL หยุดชะงัก
ฉันมี 2 แบบสอบถามซึ่งเมื่อทำงานในเวลาเดียวกันจะทำให้เกิดการหยุดชะงัก แบบสอบถาม 1 - อัปเดตคอลัมน์ซึ่งรวมอยู่ในดัชนี (ดัชนี 1): update table1 set column1 = value1 where id = @Id ใช้ X-Lock บน table1 จากนั้นลอง X-Lock บน index1 แบบสอบถาม 2: select columnx, columny, etc from table1 where {some condition} นำ S-Lock ไปที่ index1 จากนั้นลอง S-Lock บน table1 มีวิธีการป้องกันการหยุดชะงักในขณะที่รักษาข้อความค้นหาเดียวกันหรือไม่ ตัวอย่างเช่นฉันสามารถใช้ X-Lock ในดัชนีในธุรกรรมการปรับปรุงก่อนการปรับปรุงเพื่อให้แน่ใจว่าการเข้าถึงตารางและดัชนีอยู่ในลำดับเดียวกัน …

1
สถิติ. ฮิสโทแกรมหลายสีเป็นไปได้หรือไม่
ฉันกำลังคิดถึงสถานการณ์ที่ฉันมีสองคอลัมน์ที่มีความหนาแน่นสูง แต่คอลัมน์เหล่านี้ไม่ได้เป็นอิสระ คำนิยาม นี่คือคำจำกัดความของตารางที่ฉันสร้างขึ้นเพื่อวัตถุประสงค์ในการทดสอบ CREATE TABLE [dbo].[StatsTest]( [col1] [int] NOT NULL, --can take values 1 and 2 only [col2] [int] NOT NULL, --can take integer values from 1 to 4 only [col3] [int] NOT NULL, --integer. it has not relevance just to ensure that each row is different [col4] AS …

2
การใช้พื้นที่บน sys.allocation_units และ sp_spaceused
มันเป็นความจริงที่รู้จักกันว่า DMVs ไม่ได้เก็บข้อมูลที่ถูกต้องเกี่ยวกับจำนวนหน้าและจำนวนแถว อย่างไรก็ตามเมื่อคุณอัปเดตสถิติฉันไม่สามารถเห็นได้ว่าทำไมพวกเขาถึงไม่ทำ ฉันกำลังทำงานกับเครื่องมือตรวจสอบ, ต้องการทราบขนาดดิสก์ของแต่ละดัชนีและข้อมูล ฯลฯ ในที่สุดฉันต้องการค้นหาปัจจัยเติมที่เหมาะสมและสิ่งอื่น ๆ เป็นต้น พื้นที่ที่ใช้โดยฟังก์ชั่นของฉันและ sp_spaceused เก่าแตกต่างกันเล็กน้อยในการใช้พื้นที่ แต่ไม่ได้อยู่ในการบันทึก คุณเห็นหรือไม่ว่ามีอะไรขาดหายไปในการเลือกของฉัน นี่คือ sp_spaceused (จากนั้นฉันแปลงตัวเลขเป็น MB): sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused แต่เมื่อฉันเลือกตัวเลือกโค้ดด้านล่าง \ ภาพด้านล่างฉันได้รับตัวเลขที่แตกต่างกันเล็กน้อย SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS …

11
วิธีค้นหาความแตกต่างของเนื้อหาระหว่าง 2 ตาราง SQL และสร้างข้อมูลให้ตรงกัน SQL
ฉันจะค้นหาความแตกต่างของข้อมูลระหว่างสองตารางที่มี schema ที่แน่นอนได้อย่างไรและจะสร้าง SQL การซิงโครไนซ์เพื่อให้ได้ผลลัพธ์สหภาพ (โดยไม่ซ้ำกัน) ได้อย่างไร นี่คือ 2 ตาราง: SOURCE01.dbo.Customers (31,022 rows) TARGET01.dbo.Customers (29,300 rows) สคีมาของแต่ละตารางคือ: [CustomerId] : nvarchar(255) [CustomerSerializedProfile]: nvarchar(max) [CreatedDatetime] : DateTime

1
การหยุดชะงักเมื่ออัพเดตแถวต่าง ๆ ด้วยดัชนีที่ไม่ทำคลัสเตอร์
ฉันกำลังแก้ไขปัญหาการหยุดชะงักในขณะที่ฉันสังเกตเห็นว่าพฤติกรรมการล็อคแตกต่างกันเมื่อฉันใช้ดัชนีแบบคลัสเตอร์และแบบไม่รวมกลุ่มบนฟิลด์รหัส ปัญหาการหยุดชะงักดูเหมือนว่าจะได้รับการแก้ไขหากดัชนีหรือคีย์หลักที่ถูก clusted ถูกนำไปใช้กับฟิลด์ id ฉันมีการทำธุรกรรมที่แตกต่างกันที่ทำการอัปเดตแถวที่แตกต่างกันอย่างน้อยหนึ่งรายการเช่นธุรกรรม A จะอัปเดตแถวที่มี ID = a เท่านั้น tx B จะแตะแถวที่มี ID = b เท่านั้น และฉันเข้าใจดีว่าหากไม่มีดัชนีการอัปเดตจะได้รับการอัพเดตการล็อคสำหรับแถวทั้งหมดและแปลงเป็นล็อคแบบเอกสิทธิ์เฉพาะบุคคลเมื่อจำเป็นซึ่งในที่สุดจะนำไปสู่การหยุดชะงัก แต่ฉันล้มเหลวในการค้นหาสาเหตุที่มีดัชนีที่ไม่ใช่คลัสเตอร์การหยุดชะงักยังคงอยู่ที่นั่น (แม้ว่าอัตราการเข้าชมดูเหมือนจะลดลง) ตารางข้อมูล: CREATE TABLE [dbo].[user]( [id] [int] IDENTITY(1,1) NOT NULL, [userName] [nvarchar](255) NULL, [name] [nvarchar](255) NULL, [phone] [nvarchar](255) NULL, [password] [nvarchar](255) NULL, [ip] [nvarchar](30) NULL, [email] [nvarchar](255) NULL, [pubDate] …

3
ไม่อนุญาตให้ใช้คำสั่งแก้ไขฐานข้อมูลภายในธุรกรรมหลายข้อความ
ฉันได้ดาวน์โหลดตัวอย่างจากหน่วยความจำใน AdventureWorks จากที่นี่และทำตามขั้นตอนทั้งหมดที่อธิบายไว้ในเอกสารประกอบ อย่างไรก็ตามเมื่อฉันพยายามเรียกใช้สคริปต์ใน SQL Server Management Studio ฉันได้รับข้อความแสดงข้อผิดพลาด: ไม่อนุญาตให้ใช้คำสั่งแก้ไขฐานข้อมูลภายในธุรกรรมหลายข้อความ ข้อผิดพลาดชี้ไปที่บรรทัด 9 ซึ่งก็คือ: IF NOT EXISTS (SELECT * FROM sys.data_spaces WHERE type='FX') ALTER DATABASE CURRENT ADD FILEGROUP [AdventureWorks2012_mod] CONTAINS MEMORY_OPTIMIZED_DATA GO เนื่องจากนี่เป็นเอกสารอย่างเป็นทางการของ Microsoft (มากกว่าหรือน้อยกว่า) ฉันจึงถือว่าเป็นสิ่งที่ฉันทำผิด แต่ฉันไม่สามารถเข้าใจได้ว่ามันคืออะไร

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