ผู้ดูแลฐานข้อมูล

ถามตอบสำหรับผู้เชี่ยวชาญด้านฐานข้อมูลที่ต้องการพัฒนาทักษะฐานข้อมูลและเรียนรู้จากผู้อื่นในชุมชน

5
SARGable WHERE clause สำหรับสองคอลัมน์วันที่
ฉันมีคำถามที่น่าสนใจเกี่ยวกับ SARGability คืออะไร ในกรณีนี้มันเกี่ยวกับการใช้เพรดิเคตกับความแตกต่างระหว่างสองคอลัมน์วันที่ นี่คือการตั้งค่า: USE [tempdb] SET NOCOUNT ON IF OBJECT_ID('tempdb..#sargme') IS NOT NULL BEGIN DROP TABLE #sargme END SELECT TOP 1000 IDENTITY (BIGINT, 1,1) AS ID, CAST(DATEADD(DAY, [m].[severity] * -1, GETDATE()) AS DATE) AS [DateCol1], CAST(DATEADD(DAY, [m].[severity], GETDATE()) AS DATE) AS [DateCol2] INTO #sargme FROM sys.[messages] AS [m] …

9
ทดสอบว่าสตริงเป็น palindrome โดยใช้ T-SQL
ฉันเป็นผู้เริ่มต้นใน T-SQL ฉันต้องการตัดสินใจว่าสตริงอินพุตเป็น palindrome โดยมีเอาต์พุต = 0 หากไม่ใช่และ output = 1 หากเป็น ฉันยังคงหาไวยากรณ์ ฉันไม่ได้รับข้อความแสดงข้อผิดพลาด ฉันกำลังมองหาวิธีแก้ไขปัญหาที่แตกต่างกันและข้อเสนอแนะบางอย่างเพื่อให้ได้ความเข้าใจและความรู้ที่ดีขึ้นเกี่ยวกับวิธีการทำงานของ T-SQL เพื่อให้ทำงานได้ดีขึ้น - ฉันยังเป็นนักเรียนอยู่ ความคิดหลักที่ฉันเห็นคือการเปรียบเทียบอักขระซ้าย - ขวา - ส่วนใหญ่กับแต่ละอื่น ๆ เพื่อตรวจสอบความเท่าเทียมกันจากนั้นไปเปรียบเทียบอักขระที่สองจากด้านซ้ายกับอักขระ 2 จากซ้ายและสุดท้าย เราวนซ้ำ: ถ้าตัวละครมีค่าเท่ากันเราจะดำเนินการต่อ ถ้าเราถึงจุดสิ้นสุดเราจะเอาท์พุท 1 ถ้าไม่เราก็เอาท์พุท 0 คุณช่วยวิจารณ์ได้ไหม: CREATE function Palindrome( @String Char , @StringLength Int , @n Int , @Palindrome BIN , …

2
ใน SQL Server ฉันสามารถรับประกันการสั่งซื้อโดยไม่มีคำสั่ง ORDER BY อย่างชัดเจนเมื่อการค้นหาดัชนีถูกบังคับบนตารางที่มีเพียงดัชนีคลัสเตอร์เท่านั้น
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 4 ปีที่แล้ว อัปเดต 2014-12-18 ด้วยการตอบรับอย่างล้นหลามไปที่คำถามหลักที่ถูก "ไม่มี" การตอบสนองที่น่าสนใจมากขึ้นได้มุ่งเน้นในส่วนที่ 2 ORDER BYวิธีในการแก้ปริศนาประสิทธิภาพการทำงานที่มีความชัดเจน แม้ว่าฉันได้ทำเครื่องหมายคำตอบไว้แล้ว แต่ฉันก็ไม่แปลกใจถ้ามีวิธีการแก้ปัญหาที่ดีกว่า เป็นต้นฉบับ คำถามนี้เกิดขึ้นเพราะวิธีแก้ปัญหาที่เร็วที่สุดเพียงอย่างเดียวที่ฉันสามารถพบกับปัญหาเฉพาะนั้นใช้ได้โดยไม่มีORDER BYข้อ ด้านล่างนี้เป็น T-SQL แบบเต็มรูปแบบที่จำเป็นในการสร้างปัญหาพร้อมกับวิธีแก้ไขปัญหาที่เสนอของฉัน (ฉันใช้ SQL Server 2008 R2 ถ้าเป็นเช่นนั้น) --Create Orders table IF OBJECT_ID('tempdb..#Orders') IS NOT NULL DROP TABLE #Orders CREATE TABLE #Orders ( OrderID INT …
24 sql-server 

6
ฉันสามารถอ่านค่า SQL Server Identity ตามลำดับได้หรือไม่?
TL: DR:คำถามด้านล่างนี้ลดลงเหลือ: เมื่อแทรกแถวจะมีหน้าต่างของโอกาสระหว่างการสร้างIdentityค่าใหม่และการล็อคกุญแจแถวที่สอดคล้องกันในดัชนีคลัสเตอร์ซึ่งผู้สังเกตการณ์ภายนอกจะเห็นที่ใหม่กว่า Identityมูลค่าแทรกโดยการทำธุรกรรมพร้อมกันหรือไม่ (ใน SQL Server) รุ่นโดยละเอียด ฉันมีตาราง SQL Server พร้อมIdentityคอลัมน์ที่เรียกว่าCheckpointSequenceซึ่งเป็นกุญแจสำคัญของดัชนีคลัสเตอร์ของตาราง (ซึ่งยังมีดัชนี nonclustered เพิ่มเติมอีกจำนวนหนึ่ง) แถวถูกแทรกเข้าไปในตารางโดยกระบวนการและเธรดพร้อมกันจำนวนมาก (ที่ระดับการแยกREAD COMMITTEDและไม่มีIDENTITY_INSERT) ในเวลาเดียวกันมีกระบวนการที่อ่านแถวจากดัชนีคลัสเตอร์เป็นระยะโดยเรียงลำดับตามCheckpointSequenceคอลัมน์นั้น(เช่นเดียวกับที่ระดับการแยกREAD COMMITTEDด้วยREAD COMMITTED SNAPSHOTตัวเลือกที่ถูกปิด) ขณะนี้ฉันพึ่งพาข้อเท็จจริงที่ว่ากระบวนการอ่านไม่สามารถ "ข้าม" จุดตรวจสอบได้ คำถามของฉันคือ: ฉันสามารถพึ่งพาอสังหาริมทรัพย์นี้ได้หรือไม่? และถ้าไม่ฉันจะทำอย่างไรเพื่อทำให้เป็นจริง ตัวอย่าง: เมื่อแทรกแถวที่มีค่าเอกลักษณ์ 1, 2, 3, 4 และ 5 ผู้อ่านจะต้องไม่เห็นแถวที่มีค่า 5 ก่อนที่จะเห็นแถวที่มีค่า 4 การทดสอบแสดงให้เห็นว่าแบบสอบถามซึ่งมีORDER BY CheckpointSequenceข้อ ( และWHERE CheckpointSequence > -1ประโยค) บล็อกได้อย่างน่าเชื่อถือเมื่อใดก็ตามที่ต้องอ่านแถว 4 …

4
ตั้งชื่อเป็นแอตทริบิวต์เมื่อสร้าง JSON ด้วย row_to_json
เป็นไปได้หรือไม่ที่จะเปลี่ยนชื่อชื่อเริ่มต้นf1, f2, f3...เมื่อใช้row_to_jsonฟังก์ชั่นสำหรับบางคอลัมน์เท่านั้น? ที่ฉันสามารถทำได้ row_to_json(customers) การคืน {"id_customer":2,"first_name":"bla","last_name":"second_bla"} แต่ถ้าฉันต้องการชื่อโดยไม่มีid_customerฉันต้องใช้ row_to_json(row(first_name, last_name)) แล้วฉันจะได้รับ {"f1":"bla","f2":"second_bla"} และฉันต้องการรับผลลัพธ์นี้ด้วยชื่อคอลัมน์เริ่มต้นหรือของฉันเอง ฉันรู้ว่าฉันสามารถสร้างประเภทคอมโพสิตและการใช้งานของฉันเอง row_to_json(row(first_name, last_name))::my_custom_type แต่เป็นไปไม่ได้ไหมที่จะทำให้ถูกต้องในแบบสอบถามโดยไม่ต้องสร้างประเภทนั้น
24 postgresql 

2
ความแตกต่างระหว่างแบบแผนที่เป็นเจ้าของและการเป็นสมาชิกบทบาทสำหรับ Microsoft SQL Server
มีความแตกต่างระหว่างOwned SchemasและRole Members? จากความเข้าใจของฉันRole Membersผู้ใช้จำเป็นต้องมีอย่างน้อยหนึ่งกล่องกาเครื่องหมายภายใต้Role Membersการตรวจสอบ อย่างไรก็ตามการOwned Schemasบังคับไม่ได้ มันทำให้ฉันสงสัยว่าทำไมต้องมีOwned Schemasใน

2
ฉันจะลดขนาดไฟล์ innodb ibdata1 โดยไม่ต้องทิ้งฐานข้อมูลทั้งหมดได้อย่างไร
InnoDB เก็บตารางทั้งหมดไว้ในไฟล์ibdata1เดียว หลังจากวางตารางขนาดใหญ่ไฟล์จะรักษาขนาดของมันไม่ว่าโต๊ะจะใหญ่แค่ไหน ฉันจะลดขนาดไฟล์นั้นโดยไม่ต้องถ่ายโอนข้อมูลและนำเข้าฐานข้อมูลทั้งหมดอีกครั้ง (ซึ่งมีทั้งหมดหลายร้อย GB) ฉันคิดว่าเหตุผลก็เพราะคุณยังสามารถย้อนกลับไปลดลง ในกรณีของฉันฉันไม่จำเป็นต้อง

5
ระบุขั้นตอนการจัดเก็บที่ไม่ได้ใช้
ในปีหน้านี้ฉันกำลังช่วยทำความสะอาดสภาพแวดล้อม SQL Server หลายแห่ง เรามีขั้นตอนการจัดเก็บประมาณ 10,000 รายการและประมาณว่ามีเพียง 1,000 รายการเท่านั้นที่ใช้เป็นประจำและอีก 200 รายการจะใช้ในโอกาสที่หายากซึ่งหมายความว่าเรามีงานต้องทำมากมาย เนื่องจากเรามีหลายแผนกและทีมที่สามารถเข้าถึงฐานข้อมูลและขั้นตอนเหล่านี้ได้เราจึงไม่ใช่คนที่เรียกขั้นตอนเหล่านี้เสมอไปซึ่งหมายความว่าเราต้องกำหนดว่าจะเรียกใช้ขั้นตอนใด ยิ่งไปกว่านั้นเราต้องการตรวจสอบสิ่งนี้ในอีกไม่กี่เดือนไม่ใช่ในอีกสองสามวัน (ซึ่งเป็นการขจัดความเป็นไปได้บางอย่าง) วิธีการหนึ่งในการทำเช่นนี้คือการใช้SQL Server Profilerและติดตามว่ากระบวนการใดที่ถูกเรียกใช้และเปรียบเทียบกับรายการของกระบวนการที่เรามีในขณะที่ทำเครื่องหมายว่ามีการใช้งานหรือไม่ จากนั้นเราสามารถย้ายขั้นตอนไปยังสคีมาอื่นในกรณีที่แผนกกรีดร้อง ใช้Profilerวิธีที่มีประสิทธิภาพที่สุดที่นี่หรือไม่? และ / หรือคุณเคยทำสิ่งที่คล้ายกันและพบวิธีอื่น / วิธีที่ดีกว่าในการทำเช่นนี้?

1
จะเกิดอะไรขึ้นถ้ามีการแทรกใน MongoDB มากเกินไป? จะมั่นใจได้อย่างไรว่าข้อมูลทั้งหมดถูกจัดเก็บ?
คำถามนี้ถูกโยกย้ายจาก Server Fault เนื่องจากสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 6 ปีที่แล้ว ฉันใช้ MongoDB เพื่อเก็บค่าที่วัดได้เป็นระยะ ทุก ๆ ค่าประมาณ 100 ms จะถูกแทรกเป็นเอกสาร มันใช้งานได้ดี แต่ฉันกังวลเกี่ยวกับปัญหาด้านประสิทธิภาพ (ฉันใช้ส่วนแทรกที่ปลอดภัยดูเหมือนว่าใน PyMongo นี่เป็นค่าเริ่มต้น) จะเกิดอะไรขึ้นถ้ามีการแทรกต่อวินาทีมากกว่า mongod จะสามารถบันทึกลงฮาร์ดดิสก์ได้? จะมีการเตือนภัยหรือไม่หรือจะล้มเหลวอย่างเงียบ ๆ ? มีวิธีใดบ้างในการตรวจสอบโหลดการเขียน? ฉันพบเฉพาะdb.serverStatus().writeBacksQueuedซึ่งถูกตั้งค่าเป็นเท็จเสมอเมื่อฉันเรียกมันว่า ฉันจะทดสอบจำนวนข้อมูลที่ฉันต้องแทรกเพื่อเติมคิวการเขียนได้อย่างไร mongostatแสดงล็อค นี่เป็นสิ่งที่ฉันควรกังวลหรือไม่? insert query update delete getmore command flushes mapped vsize res faults locked db idx …
24 mongodb 

3
ทำไม `SELECT @@ IDENTITY 'ถึงส่งกลับทศนิยม
ฉันใช้Dapperเพื่อดำเนินการค้นหาต่อไปนี้กับอินสแตนซ์ SQL Server 2008 R2 Express จากแอปพลิเคชัน ASP.NET MVC 3 (.NET 4.0) INSERT INTO Customers ( Type, Name, Address, ContactName, ContactNumber, ContactEmail, Supplier) VALUES ( @Type, @Name, @Address, @ContactName, @ContactNumber, @ContactEmail, @Supplier) SELECT @@IDENTITY การเรียกร้องให้connection.Query<int>(sql, ...)ส่งการยกเว้น Cast ไม่ถูกต้อง ผมเคยบั๊กมันและมันก็เป็นจุดที่ Dapper เรียกบนกลับGetValueSqlDataReader ชนิดส่งคืนของGetValueคือObjectการตรวจสอบในรายการดีบักเกอร์ซึ่งเป็นทศนิยมแบบกล่อง ถ้าฉันเปลี่ยนการเลือกSELECT CAST(@@IDENTITY as int)เป็นการคืนค่าของ GetValue จะเป็น int แบบกล่องและข้อยกเว้นจะไม่ถูกส่งออกไป …

6
แก้ไขตารางในฐานข้อมูลที่ใช้งานจริง
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 7 ปีที่ผ่านมา ระบบฐานข้อมูล "ยอดนิยม" (MySQL, Postgres ... ) ส่วนใหญ่จะจัดการกับการเปลี่ยนแปลงตารางบนฐานข้อมูลการผลิตจริง (เช่นการเพิ่มการลบหรือการเปลี่ยนประเภทของโคลลัส) ได้อย่างไร ฉันรู้ว่าวิธีที่ถูกต้องคือการสำรองข้อมูลทุกอย่างกำหนดเวลาหยุดทำงานและทำการเปลี่ยนแปลง แต่ ... ระบบฐานข้อมูลปัจจุบันสนับสนุนการทำสิ่งเหล่านี้ "ออนไลน์" โดยไม่หยุดอะไรหรือไม่? (อาจเป็นเพียงการชะลอการสืบค้นที่อ้างอิงคอลัมน์ที่เพิ่งมีการเปลี่ยนแปลง / ลบ) และจะเกิดอะไรขึ้นเมื่อฉันเพิ่งALTER TABLE...สร้างฐานข้อมูลที่ทำงานอยู่ ทุกอย่างหยุดลงเมื่อสิ่งนี้เกิดขึ้นหรือไม่? ข้อมูลเสียหายหรือไม่ เป็นต้น อีกครั้งฉันส่วนใหญ่หมายถึง Postgres หรือ MySQL เป็นสิ่งที่ฉันพบ (และใช่ทุกครั้งที่ฉันต้องทำสิ่งนี้ก่อนที่ฉันจะทำ "วิธีการที่ถูกต้อง" สำรองสิ่งต่างๆจัดตารางเวลาดาวน์ไทน์ ฯลฯ ... แต่ฉันแค่อยากรู้ว่ามันเป็นไปได้ไหมที่จะทำสิ่งนี้ " สกปรก "หรือหากมีระบบฐานข้อมูลใด ๆ ที่รองรับการเปลี่ยนแปลงสคีมา" …

3
แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการใช้ schema ใน SQL Server คืออะไร
ฉันเข้าใจความสามารถของ SQL Server Schemas แต่แนวทางปฏิบัติที่ดีที่สุดคืออะไร แน่ใจว่าพวกเขาให้ความปลอดภัยอีกชั้นหนึ่งและจัดกลุ่มตรรกะของวัตถุฐานข้อมูลภายในฐานข้อมูล แต่สิ่งที่เป็นปกติออกมี จากประสบการณ์ของฉันบ่อยครั้งที่ฉันไม่เห็นว่ามีการใช้สคีมาที่กำหนดเองจำนวนมาก เป็นเรื่องปกติหรือไม่ มันเป็นสถานการณ์ที่ไม่บ่อยนักที่ควรใช้สกีมาที่กำหนดเองหรือไม่


5
วิธีสร้างดัชนีตามเงื่อนไขใน MySQL
จะสร้างดัชนีเพื่อกรองช่วงหรือเซตย่อยของตารางใน MySQL ได้อย่างไร? AFAIK เป็นไปไม่ได้ที่จะสร้างโดยตรง แต่ฉันคิดว่ามันเป็นไปได้ที่จะจำลองคุณลักษณะนี้ ตัวอย่าง: ฉันต้องการสร้างดัชนีสำหรับNAMEคอลัมน์สำหรับแถวด้วยSTATUS = 'ACTIVE' ฟังก์ชันนี้จะเรียกว่าดัชนีที่กรองแล้วใน SQL Server และดัชนีบางส่วนใน Postgres

3
ดัชนีบนคอลัมน์ที่คำนวณแล้วต้องการค้นหาคีย์เพื่อรับคอลัมน์ในนิพจน์ที่คำนวณ
คำถามนี้ถูกโยกย้ายจาก Stack Overflow เพราะสามารถตอบได้ใน Exchange Administrators Stack Exchange อพยพ 6 ปีที่แล้ว ฉันมีคอลัมน์ที่คำนวณแล้วยังคงอยู่บนโต๊ะซึ่งเป็นเพียงคอลัมน์ที่ต่อกันเช่น CREATE TABLE dbo.T ( ID INT IDENTITY(1, 1) NOT NULL CONSTRAINT PK_T_ID PRIMARY KEY, A VARCHAR(20) NOT NULL, B VARCHAR(20) NOT NULL, C VARCHAR(20) NOT NULL, D DATE NULL, E VARCHAR(20) NULL, Comp AS A + '-' + …

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