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

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

2
วิธีสร้างแบบจำลองประเภทเอนทิตีที่สามารถมีชุดคุณสมบัติที่แตกต่างกันได้อย่างไร
ฉันมีปัญหาบางอย่างในการสร้างฐานข้อมูลที่มีอย่างใดอย่างหนึ่งต่อหลาย (1: M) ความสัมพันธ์ระหว่างผู้ใช้และรายการ ตรงไปตรงมานี้ใช่ อย่างไรก็ตามแต่ละรายการเป็นของบางประเภท (เช่นรถเป็นเรือหรือเครื่องบิน ) และแต่ละประเภทมีจำนวนโดยเฉพาะอย่างยิ่งของคุณลักษณะเช่น: Car โครงสร้าง: +----+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | +----+--------------+--------------+ Boat โครงสร้าง: +----+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | +----+--------------+--------------+--------------+ Plane โครงสร้าง: +----+--------------+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | …

3
DROP USER ใช้เวลานานเกินไปเมื่อมีผู้ใช้จำนวนมาก
บนอินสแตนซ์ SQL Server 2014 ที่มี RAM และดิสก์เร็วพอมีผู้ใช้มากกว่า 160 รายที่สามารถเข้าถึงฐานข้อมูล ด้วยเหตุผลบางอย่างที่ไม่รู้จักกับฉันการเรียกใช้คำสั่งDROP USER [username]ในฐานข้อมูลนี้ใช้เวลาสูงสุด 5 วินาทีต่อผู้ใช้หนึ่งราย การกำหนดผู้ใช้ใหม่ให้เข้าสู่ระบบและกู้คืนสิทธิ์ของพวกเขานั้นรวดเร็วมาก ภายในบริบทของการรีเฟรชฐานข้อมูล DEV จากการผลิตฉันต้องปล่อยและสร้างผู้ใช้ฐานข้อมูลทั้งหมดใหม่ ดังนั้นใช่ปล่อยผู้ใช้ฐานข้อมูลและสร้างพวกเขาเป็นสิ่งที่จำเป็น ฉันจะเร่งความเร็วDROP USERคำสั่งได้อย่างไร โปรดจำไว้ว่าฉันต้องเรียกใช้เกิน 160 ครั้งสำหรับอินสแตนซ์ที่ฉันเขียน นี่คือ SQL ที่ฉันใช้: DECLARE drop_user_cur CURSOR FOR SELECT name FROM #drop_users OPEN drop_user_cur FETCH NEXT FROM drop_user_cur INTO @user WHILE @@FETCH_STATUS = 0 BEGIN SET @sql …

1
ประโยชน์ของกลุ่มไฟล์และการตั้งค่ากลุ่มไฟล์เป็นแบบอ่านอย่างเดียว
ใครบางคนสามารถอ้างอิงสถานการณ์โลกแห่งความจริงให้ฉันเมื่อเปลี่ยนกลุ่มไฟล์หลายกลุ่มเป็นแบบอ่านอย่างเดียวเป็นตัวเลือกที่ดีและจะใช้เมื่อใด มีประโยชน์อะไรบ้างถ้าคุณตั้งให้เป็นแบบอ่านอย่างเดียว บนฐานข้อมูลที่มีหลายกลุ่มไฟล์คุณต้องสำรองข้อมูลสำหรับฐานข้อมูลทั้งหมดและสำรองไฟล์แต่ละไฟล์ของกลุ่มไฟล์นั้นหรือไม่ คุณสามารถยกตัวอย่างให้ฉันเมื่อใช้การสำรองข้อมูลกลุ่มไฟล์ได้หรือไม่ ฉันไม่เห็นว่าทำไมจึงเป็นประโยชน์ในการสำรองไฟล์กลุ่มเมื่อคุณสามารถสำรองฐานข้อมูลทั้งหมดได้ หวังว่าฉันจะได้รับประสบการณ์ในโลกแห่งความจริงที่การสำรองไฟล์ของกลุ่มนี้จะเหมาะ

1
CASE expression ส่งคืนค่าที่ผิดเมื่อใช้ CEILING
ฉันพบปัญหาที่CASEนิพจน์ไม่ส่งคืนสิ่งที่ฉันคาดหวัง ในการทดสอบฉันเพิ่มตัวแปรทศนิยมและใช้CASEนิพจน์เดียวกันกับมันและใช้งานได้ดีส่งคืนผลลัพธ์ตามที่คาดไว้ (ปัดเศษค่าขึ้นเมื่อIsGun=1แต่เมื่อฉันเรียกใช้CASEนิพจน์เดียวกันกับค่าทศนิยมอื่นมันจะส่งกลับเสมอ ค่าที่มีCEILING()ฟังก์ชั่นและจะไม่ส่งคืนค่าเดิม นี่คือรหัส SQL: DECLARE @Num decimal(8,2); set @Num = 12.54; WITH PQ AS ( SELECT UPC, Price1, DBID, AVG(Price1) OVER (PARTITION BY UPC) AS Price1Avg FROM vProducts_PriceQty_Union ) SELECT PQ.UPC, PQ.Price1, PQ.Price1Avg, (CASE WHEN p.IsGun = 1 THEN CEILING(@Num) ELSE @Num END) AS UsingVar, CAST( (CASE WHEN …

3
ตัวอย่างที่ดีของ MDX vs SQL สำหรับการสืบค้นเชิงวิเคราะห์
ทุกคนสามารถแสดงให้ฉันเห็นตัวอย่างที่ดีเกี่ยวกับข้อดีของ MDX เหนือ SQL ทั่วไปเมื่อทำการสอบถามวิเคราะห์? ฉันต้องการเปรียบเทียบแบบสอบถาม MDX กับแบบสอบถาม SQL ที่ให้ผลลัพธ์ที่คล้ายกัน Wikipedia พูดว่า : แม้ว่ามันจะเป็นไปได้ที่จะแปลบางส่วนเหล่านี้เป็น SQL แบบดั้งเดิม แต่มันก็มักจะต้องมีการสังเคราะห์นิพจน์ SQL ที่เงอะงะแม้สำหรับ MDX ที่ง่ายมาก แต่ไม่มีการอ้างอิงหรือตัวอย่าง ฉันตระหนักดีว่าข้อมูลพื้นฐานจะต้องมีการจัดระเบียบที่แตกต่างกันและ OLAP จะต้องการการประมวลผลและการจัดเก็บต่อการแทรกเพิ่ม (ข้อเสนอของฉันคือการย้ายจาก Oracle RDBMS ไปยังApache Kylin + Hadoop ) บริบท:ฉันพยายามโน้มน้าวใจ บริษัท ของฉันว่าเราควรทำการสืบค้นฐานข้อมูล OLAP แทนฐานข้อมูล OLTP ข้อความค้นหา SIEM ส่วนใหญ่ใช้การเรียงลำดับตามกลุ่มและการรวมกันเป็นจำนวนมาก นอกเหนือจากการเพิ่มประสิทธิภาพแล้วฉันคิดว่าข้อความค้นหา OLAP (MDX) จะกระชับและอ่าน / เขียนได้ง่ายกว่า OLTP SQL …
11 olap  mdx 

4
'Id' ที่มีรูปแบบ: YYYYNNNNNN ที่มีส่วน NNNNNN เริ่มต้นใหม่ทุกปี
ฉันมีข้อกำหนดทางธุรกิจที่แต่ละระเบียนในตารางใบแจ้งหนี้มีรหัสซึ่งดูเหมือน YYYYNNNNNNN ส่วน NNNNNN จำเป็นต้องเริ่มต้นใหม่ทุกต้นปี ดังนั้นแถวแรกที่ป้อนในปี 2559 จะมีลักษณะเป็น 2016000001 และแถวที่สองเช่น 2016000002 ฯลฯ ให้บอกว่าระเบียนสุดท้ายของปี 2559 คือ 2016123456 แถวถัดไป (ของปี 2017) ควรมีลักษณะเหมือน 2017000001 ฉันไม่ต้องการรหัสนี้เป็นคีย์หลักและฉันเก็บวันที่สร้างเช่นกัน แนวคิดคือ 'รหัสแสดง' นี้ไม่ซ้ำกัน (ดังนั้นฉันจึงสามารถค้นหาได้) และกลุ่มคนสามารถปี ไม่น่าเป็นไปได้ที่จะมีการลบบันทึกใด ๆ อย่างไรก็ตามฉันจะโน้มน้าวให้รหัสป้องกันสิ่งเช่นนั้น มีวิธีใดบ้างที่ฉันสามารถสร้าง id นี้โดยไม่ต้องค้นหา max id ในปีนี้ทุกครั้งที่มีการแทรกแถวใหม่ ไอเดีย: A CreateNewInvoiceSPซึ่งได้รับความMAXคุ้มค่าสำหรับปีนั้น (yucky) คุณลักษณะบางอย่างในตัวที่มีมนต์ขลังสำหรับการทำสิ่งนี้ (ฉันฝันได้ถูกต้อง) ความสามารถในการระบุ UDF หรือบางอย่างในIDENTITYหรือDEFAULTการประกาศ (??) มุมมองที่ใช้PARTITION OVER + ROW()(ถูกลบจะมีปัญหา) …
11 sql-server  t-sql 


5
แปลงช่วงวันที่เป็นคำอธิบายช่วงเวลา
ความต้องการในโครงการล่าสุดคือการรายงานเมื่อทรัพยากรจะถูกใช้อย่างเต็มที่ เช่นเดียวกับวันที่ในปฏิทินอ่อนเพลียฉันถูกขอให้แสดงเวลาที่เหลือในรูปแบบเหมือนภาษาอังกฤษบางอย่างเช่น "1 ปี 3 เดือน" DATEDIFFฟังก์ชั่นในตัว ส่งคืนการนับ ... ของขอบเขตวันที่ที่ระบุซึ่งข้ามระหว่างวันที่เริ่มต้นและวันที่ที่ระบุ หากใช้ตาม - นี่อาจทำให้เกิดความเข้าใจผิดหรือผลลัพธ์ที่สับสน ตัวอย่างเช่นการใช้ช่วงเวลาของปีจะแสดงปี 1999-12-31 (YYYY-MM-DD) และ 2000-01-01 ให้แยกกันหนึ่งปีในขณะที่สามัญสำนึกจะบอกว่าวันเหล่านี้จะแยกจากกันโดยเพียง 1 วัน ตรงกันข้ามโดยใช้ช่วงเวลาของวันที่ 1999-12-31 และ 2010-12-31 จะถูกคั่นด้วย 4,018 วันในขณะที่คนส่วนใหญ่จะเห็นว่า "11 ปี" เป็นคำอธิบายที่ดีกว่า เริ่มต้นจากจำนวนวันและการคำนวณเดือนและปีจากนั้นมีแนวโน้มที่จะเกิดข้อผิดพลาดปีและขนาดของเดือน ฉันสงสัยว่าจะสามารถนำไปใช้กับภาษาท้องถิ่น SQL ได้อย่างไร? ตัวอย่างผลลัพธ์ประกอบด้วย: create table TestData( FromDate date not null, ToDate date not null, ExpectedResult varchar(100) not …

3
ลำดับฟิลด์ในลำดับดัชนีคอมโพสิตที่มีการเลือกสูงและฟิลด์การเลือกต่ำ
ฉันมีตาราง SQL Server ที่มีมากกว่า 3 พันล้านแถว หนึ่งในคำถามของฉันใช้เวลานานมากดังนั้นฉันจึงพิจารณาที่จะเพิ่มประสิทธิภาพ แบบสอบถามมีลักษณะดังนี้: SELECT [Enroll_Date] ,Count(*) AS [Record #] ,Count(Distinct UserID) AS [User #] FROM UserTable GROUP BY [Enroll_Date] [Enroll_Date] เป็นคอลัมน์การเลือกต่ำที่มีค่าน้อยกว่า 50 ค่าในขณะที่คอลัมน์ UserID เป็นคอลัมน์เลือกสูงที่มีค่าแตกต่างกันมากกว่า 200 ล้านรายการ จากการวิจัยของฉันฉันเชื่อว่าฉันควรสร้างดัชนีคอมโพสิตแบบไม่รวมกลุ่มในสองคอลัมน์นี้และในทางทฤษฎีแล้วคอลัมน์การเลือกสูงควรเป็นคอลัมน์แรก แต่ฉันไม่แน่ใจว่าในกรณีของฉันจะทำงานได้เพราะฉันใช้คอลัมน์หัวกะทิต่ำในกลุ่มโดยข้อ ตารางนี้ไม่มีดัชนีคลัสเตอร์

1
ไม่ใช้ดัชนี SEEK เว้นแต่ OPTION (RECOMPILE)?
(คำถามย้ายจาก SO) ฉันมีตาราง (ข้อมูลหุ่น) ที่มีดัชนีคลัสเตอร์ประกอบด้วย 2 คอลัมน์: ตอนนี้ฉันเรียกใช้แบบสอบถามทั้งสองนี้: declare @productid int =1 , @priceid int = 1 SELECT productid, t.priceID FROM Transactions AS t WHERE (productID = @productid OR @productid IS NULL) AND (priceid = @priceid OR @priceid IS NULL) SELECT productid, t.priceID FROM Transactions AS t WHERE (productID = …

1
วิธีการส่งออกผลลัพธ์ของ sp_AskBrent
เรามีตัวอย่างที่สุ่ม CPU ฉันต้องการสร้างการแจ้งเตือนที่ใช้ซีพียูมากกว่า 90% และเรียกงานที่ทำงานโดยอัตโนมัติsp_AskBrentและส่งอีเมลถึงฉัน อย่างไรก็ตามเอาต์พุตไม่สามารถอ่านได้ใน Text หรือ HTML output มันไม่ได้เป็นไปด้วยดีในสเปรดชีต Excel ฉันจะรับข้อมูลในรูปแบบที่อ่านได้อย่างไร

1
เหตุใดดัชนีของฉันจึงสามารถค้นหาประมาณจำนวนแถวที่ถูกต้องและตัวดำเนินการเรียงลำดับไม่ได้
ฉันมีแบบสอบถามที่ใช้ฟังก์ชันในเพรดิเคตบางอย่างเช่นนี้: commentType = 'EL' AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0) ฉันมีดัชนีตัวกรองใน commentType ที่มีแถว 40K และเมื่อฉันเรียกใช้แบบสอบถามจำนวนแถวโดยประมาณสำหรับดัชนี Seek นั้นแม่นยำมาก (ประมาณ 11K) แต่สำหรับขั้นตอนต่อไป (ตัวดำเนินการเรียงลำดับ) จะไม่สนใจสถิติและ เพียงประมาณจำนวนแถวทั้งหมดในดัชนีที่กรอง ทำไมสิ่งนี้จึงเกิดขึ้น ฉันรู้พื้นฐานเกี่ยวกับการsargabilityและฉันทดสอบเพียงเพื่อความมีสติแทน dateadd ตามวันที่จริง (2014-01-01) และ voila ... การเรียงลำดับเริ่มเดาจำนวนแถวอย่างถูกต้อง ... เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร ฉันไม่สามารถผ่านวันที่แน่นอน ...

5
ย้อนกลับนิพจน์บูลีนซึ่งสามารถส่งคืน UNKNOWN
ตัวอย่าง ฉันมีโต๊ะ ID myField ------------ 1 someValue 2 NULL 3 someOtherValue และนิพจน์ T-SQL Boolean ซึ่งสามารถประเมินค่าเป็น TRUE, FALSE หรือ (เนื่องจากตรรกะที่ประกอบไปด้วยของ SQL) UNKNOWN: SELECT * FROM myTable WHERE myField = 'someValue' -- yields record 1 หากฉันต้องการได้รับบันทึกอื่น ๆ ทั้งหมดฉันไม่สามารถปฏิเสธการแสดงออกได้ SELECT * FROM myTable WHERE NOT (myField = 'someValue') -- yields only record 3 …

1
จะเกิดอะไรขึ้นเมื่อเราเพิ่มดัชนีไปยังตารางที่มีอยู่ด้วยข้อมูลจำนวนมาก
ฉันมีตารางซึ่งจะมีประมาณ ~ 15 ล้านระเบียน ตอนนี้ฉันต้องเพิ่มดัชนีในตาราง การเพิ่มดัชนีจะใช้เวลาในการอัปเดตทุกรายการในตาราง ฉันค่อนข้างสับสนว่าการเพิ่มดัชนีจะทำให้ระบบหยุดทำงานหรือไม่ ถ้าใช่ฉันจะเอาชนะการหยุดทำงานได้อย่างไร

2
เหตุผลที่ดีในการใช้ SELECT ... ด้วย XLOCK
ฉันกำลังเผชิญหน้ากับการหยุดชะงักที่เกิดขึ้นอีกครั้งหนึ่งในนั้นคือ Keylock และมีการสืบค้น SELECT พร้อมคำใบ้ XLOCK ที่กลายเป็นเหยื่อการหยุดชะงัก คำสั่งอื่น ๆ คือการแทรกลงในหนึ่งในตารางที่เป็นส่วนหนึ่งของมุมมองของแบบสอบถามแรก ดู: create view dbo.viewE as select * from dbo.E where myValue > 13000 เลือกคำค้นหา: select * from dbo.viewE with (XLOCK) where A > GETUTCDATE() คำสั่ง INSERT: INSERT INTO [dbo].[E] (myValue,A) VALUES (10,GetDate()) ตารางต้นแบบ dbo.E มีพื้นที่ประมาณ 3 ล้านแถวในประมาณ 20 คอลัมน์บางส่วนเป็น ntext …

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