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

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

1
พฤติกรรมแปลก ๆ กับคอลัมน์ที่คำนวณใน SQL-Server
ในขณะที่อ่านหนังสือสอบ 70-433 ของฉันฉันคิดถึงสิ่งที่ฉันเห็นว่าไม่ทำงาน แต่ฉันเชื่อว่าเป็นเช่นนั้น บทความอ่านอะไรบางอย่างเช่น: คอลัมน์ต้องถูกทำเครื่องหมายเป็นPERSISTEDซึ่งหมายความว่า SQL Server เก็บผลลัพธ์ของนิพจน์ของคอลัมน์ที่คำนวณไว้ในแถวข้อมูลแทนการคำนวณทุกครั้งที่มีการอ้างอิงในแบบสอบถาม จากนี้ฉันเข้าใจสองสิ่ง: ไม่ใช่ยืนกรานคอลัมน์คำนวณจะคำนวณทุกครั้งที่มีการอ้างถึงในแบบสอบถาม เนื่องจากไม่มีสิ่งใดถูกเก็บไว้สำหรับคอลัมน์ที่คำนวณฉันจึงไม่สามารถสร้างดัชนีสำหรับคอลัมน์ได้ หลังจากอ่านแล้วฉันคิดว่ามันแปลกไปนิดหน่อยที่ฉันสามารถสร้างดัชนีในคอลัมน์ที่ไม่มีการยืนยันในโครงการก่อนหน้านี้ สามารถสร้างดัชนีสำหรับบางสิ่งที่ไม่คงอยู่ได้อย่างไรและเป็นอันตรายในระยะยาวหรือไม่ เพื่อพิสูจน์สิ่งนี้ฉันได้รันคำสั่ง SQL ต่อไปนี้: CREATE TABLE testTable ( ID INT IDENTITY(1,1) PRIMARY KEY, telephone VARCHAR(14), c_areaCode AS (SUBSTRING(telephone,0,5)), cp_areaCode AS (SUBSTRING(telephone,0,5)) PERSISTED ) INSERT INTO testTable VALUES('09823 000000'); INSERT INTO testTable VALUES('09824 000000'); INSERT INTO testTable VALUES('09825 …
12 sql-server 

3
ปรับแต่งประสิทธิภาพของแบบสอบถาม
เมื่อคุณเขียนเคียวรี / proc / ฟังก์ชันที่จัดเก็บไว้แล้ววิธีที่ให้ข้อมูลมากที่สุดในการรับพารามิเตอร์ประสิทธิภาพคืออะไร คุณเรียกใช้คิวรีและดูแผนการดำเนินการจริงหรือไม่ ถ้าเป็นเช่นนั้นสิ่งที่คุณมองหาคืออะไร? เห็นได้ชัดว่าการสแกนตาราง / ดัชนีเป็นบิตที่นิยม แต่มีอะไรอีกบ้าง

1
การสร้างสตริงขนาดใหญ่สำหรับข้อมูลการทดสอบ
ผมได้รับเมื่อเร็ว ๆ นี้พยายามที่จะสร้างบางสายขนาดใหญ่ที่มีข้อมูลการทดสอบทั่วไปสำหรับคำถามที่นี่ ดูเหมือนว่าฉันเคยรู้วิธีการคูณสตริง อย่างไรก็ตามฉันไม่สามารถจำไวยากรณ์ได้อีก ฉันกำลังมองหาสิ่งที่ชอบ: SELECT 'A' + ('a' * 1000) + 'ha!' มากับ "Aaaaaaaaaaaaaaaha!" (แน่นอนอีกต่อไปแน่นอน) เป็นไปได้ใน T-SQL? (หรือฉันกำลังคิดถึงภาษาอื่นบ้าง) นอกจากนี้มีเทคนิคอื่น ๆ ในการสร้างสตริงจำนวนมากหรือไม่
12 sql-server  t-sql 

2
SQL Server: มีใครใช้ตัวเลือกการปรับแต่งการจัดสรรหน้าขนาดใหญ่?
TF834 large page allocationsมีใครใช้ตัวเลือกการปรับแต่งการใช้ ฉันเพิ่งอ่านบทความ MS เกี่ยวกับเรื่องนี้และสงสัยว่าถ้าใครเคยใช้มันและเห็นประสิทธิภาพเพิ่มขึ้น มีสิ่งใดที่ต้องระวังเคล็ดลับข้อผิดพลาดหรือไม่? เซิร์ฟเวอร์เป็น Windows 2008 64 บิต, 128 GB RAM, 4 CPU 8 core hyperthreded (รวม 64 คอร์) เซิร์ฟเวอร์ SQL2005 ฉันต้องการปรับแต่งเซิร์ฟเวอร์เพื่อใช้สเปคของมันให้ดีกว่าการใช้การติดตั้ง SQL ที่เป็นค่าเริ่มต้นที่ทำกับมันในปัจจุบัน คำแนะนำพิเศษใด ๆ จะได้รับการต้อนรับ

2
การใช้ตรรกะไม่เกี่ยวกับดัชนี
ตามหนังสือของ Microsoft เกี่ยวกับการพัฒนาฐานข้อมูลข้อสอบ 70-433:การพัฒนาฐานข้อมูลMicrosoft SQL Server 2008 : อักขระตัวแทนที่ไม่ใช่ตัวอักษรไม่ใช่ตรรกะอนุญาตให้เครื่องมือเพิ่มประสิทธิภาพคิวรีใช้ดัชนีเพื่อเพิ่มประสิทธิภาพการค้นหา เพื่อประสิทธิภาพสูงสุดคุณควรหลีกเลี่ยงการใช้ไม่คำหลักและนำสัญลักษณ์สัญลักษณ์แทน ดังนั้นฉันจึงเป็นแบบNOT INนั้นNOT EXISTSเป็นต้น ขณะนี้เกี่ยวกับคำถามSOนี้ฉันคิดว่าโซลูชันที่เลือกโดย @GBN จะละเมิดคำแถลงที่ระบุไว้ด้านบน เห็นได้ชัดว่ามันไม่ได้ ดังนั้นคำถามของฉันคือ: ทำไม

2
เทคนิคที่เหมาะสมสำหรับการจัดเก็บข้อมูลเหตุการณ์ของผู้ใช้
ฉันส่วนใหญ่เรียนรู้ด้วยตนเองเมื่อพูดถึงการออกแบบฐานข้อมูล ฉันโพสคำถามนี้เพราะฉันได้ตัดสินในโครงสร้างทั่วไปนี้ แต่ฉันสงสัยว่ามันเป็นวิธีที่มีประสิทธิภาพมากที่สุดหรือ 'มาตรฐานอุตสาหกรรม' ฐานข้อมูลส่วนใหญ่ที่ฉันออกแบบมีตารางผู้ใช้แล้วมีการติดตามบุคคล activty ในตารางอื่น ฉันเข้าใจว่าความสวยงามของฐานข้อมูลคือการมีประสิทธิภาพเหล่านี้ แต่ตารางกิจกรรมจะรวบรวมเหตุการณ์จำนวนมากอย่างรวดเร็วจากผู้ใช้ทุกคนที่ใช้เป็นประจำอย่างรวดเร็วซึ่งจะกลายเป็นตารางขนาดใหญ่อย่างรวดเร็วด้วยการใช้ผู้ใช้ในระดับปานกลาง นี่เป็นวิธีที่ดีที่สุดที่จะปล่อยให้มันเติบโตในลักษณะนี้หรือไม่? หรือเป็นระดับของตารางหรือแยกไปตามตารางที่แตกต่างกันตามวันที่หรือต่อจำนวนผู้ใช้หรืออย่างอื่น +--------------------+ +------------------------+ | UserData | | Activity | +-=------------------+ +------------------------+ | ID (auto uint) | <--1-to-many-+ | ID (auto uint) | | UserName (text) | +--> | UserID (uint) | | Email (text) | | Timestamp (time) | | …

3
ตัวเลือกสำหรับคำสั่ง ORDER BY ในมุมมองคืออะไร
คำถามนี้ต้องอยู่ในเว็บไซต์นี้ :) ORDER BY ถูกห้ามไม่ให้ใช้ในมุมมองตามที่ฉันเข้าใจเนื่องจากความเป็นไปได้ในการสั่งซื้อหลายครั้งด้วยเมื่อใช้มุมมองนี้ ฉันรู้ว่ามีวิธีการข้ามข้อ จำกัด นี้ตัวอย่างเช่นTOP 99.999999 PERCENTแต่ฉันอยากจะรู้ว่าอะไรคือวิธีปฏิบัติที่ดีที่สุดไม่ใช่วิธีที่จะแฮ็ก ดังนั้นถ้าฉันต้องการสร้างมุมมองในฐานข้อมูลของฉันสำหรับใช้ส่วนตัวหมายถึงฉันต้องการเชื่อมต่อกับฐานข้อมูลและดูข้อมูลที่ได้รับการแก้ไขและเรียงลำดับฉันจะทำอย่างไรถ้าฉันไม่สามารถสั่งซื้อมุมมองได้? ขณะนี้ใน SQL Server DB ของฉันฉันมีมุมมองกับการTOPแฮ็กและฉันใช้มันเยอะ แต่ก็รู้สึกผิด


3
ฉันจะแสดงละติจูดและลองจิจูดใน Postgres ได้อย่างไรโดยไม่ต้องใช้ PostGIS
ฉันจะแสดงละติจูดและลองจิจูดใน Postgres ได้อย่างไรโดยไม่ต้องใช้ PostGIS ระบบที่ฉันใช้ไม่อนุญาตให้ใช้ SQL ผ่านดังนั้นฉันไม่สามารถใช้ POSTGIS ได้
12 postgresql 

1
PostgreSQL: พื้นที่ว่างในดิสก์ไม่ได้ถูกปล่อยออกหลังจาก TRUNCATE
ฉันมีTRUNCATEตารางขนาดใหญ่ (~ 120Gb) ที่เรียกว่าfiles: TRUNCATE files; VACUUM FULL files; ขนาดตารางคือ 0 แต่ไม่มีพื้นที่ดิสก์ออก แนวคิดใดบ้างที่จะเรียกคืนพื้นที่ดิสก์ที่หายไป ปรับปรุง: พื้นที่ว่างในดิสก์ได้รับการปล่อยตัวหลังจาก ~ 12 ชั่วโมงโดยไม่มีการดำเนินการใด ๆ ในด้านของฉัน ฉันใช้เซิร์ฟเวอร์ Ubuntu 8.04

4
มีการเปรียบเทียบเรียงลำดับสตริงต่อไปนี้ตามลำดับต่อไปนี้ 1,2,3,6,10,10A, 10B, 11 หรือไม่
ฉันมีฐานข้อมูลที่มีคอลัมน์ VARCHAR ที่มีจำนวนเต็มความยาวแตกต่างกัน ฉันต้องการจัดเรียงพวกเขาดังนั้น 10 มาหลังจาก 9 ไม่ใช่ 1 และ 70A มาหลังจาก 70 ฉันสามารถทำได้ด้วยPATINDEX () , คำสั่ง CTE และ CASE ในส่วนคำสั่ง WHERE อย่างไรก็ตามฉันสงสัยว่ามีการเปรียบเทียบที่นี่จะไม่จำเป็น

2
แบบสอบถามทั้งสองนี้จะส่งผลให้เกิดการหยุดชะงักหากดำเนินการตามลำดับหรือไม่
นี่เป็นสาเหตุของคำถามอื่น ๆ ของฉันแต่ฉันคิดว่ามันคุ้มค่าที่จะแยกทั้งสองออกจากกันเนื่องจากฉันมีสมมติฐานตามบันทึกต่อไปนี้ที่ฉันชอบที่จะปลอมแปลงหรือตรวจสอบ สมมติฐานของฉันคือว่าการหยุดชะงักอื่น ๆเป็นผลมาจากการสอบถามต่อไปนี้โดยมีการซ่อนแบบสอบถามดั้งเดิมที่อยู่บนพื้นฐานของความเข้าใจของฉันสถานะ Innodb แสดงเฉพาะธุรกรรมล่าสุด (ถูกต้องหรือไม่) จากบันทึกฉันได้ตรวจสอบรหัสของเราและพบว่ามีการค้นหาสองรายการต่อไปนี้ตามลำดับ: db.Execute("UPDATE people SET iphone_device_id=NULL WHERE iphone_device_id=@0 AND people_id<>@1", DeviceID, m_User.people_id); // I have hard coded this query in this snippet to simplify things db.Execute("UPDATE people SET company_id = 444, name = 'Dad', password = '<pass>', temp_password = NULL, reset_password_hash = NULL, …

2
เหตุผล LNNVL
LNNVL เป็น oracle ที่มีอยู่แล้วภายในฟังก์ชันที่ส่งคืน TRUE สำหรับเงื่อนไขที่ประเมินเป็น FALSE หรือ UNKNOWN และส่งคืน FALSE สำหรับเงื่อนไขที่ประเมินเป็น TRUE คำถามของฉันคือสิ่งที่จะได้ประโยชน์จากการคืนตรงกันข้ามกับเงื่อนไขความจริงมากกว่าเพียงแค่จัดการค่า NULL? ตัวอย่างเช่นสมมติว่าคุณมีตาราง Emp พร้อมคอลัมน์ StartCommission และ CurrentCommission ซึ่งอาจมีค่า Null ผลตอบแทนต่อไปนี้เป็นเพียงแถวที่ไม่มีค่าเป็น null: SELECT * FROM Emp WHERE StartCommission = CurrentCommission; หากคุณต้องการรวมแถวที่ค่าคอมมิชชันเป็นโมฆะคุณสามารถทำสิ่งนี้: SELECT * FROM Emp WHERE StartCommission = CurrentCommission OR StartCommission IS NULL OR CurrentCommission IS NULL; …

3
ใช้ปุ่มลบเพื่ออะไร
ค่อนข้างใหม่ในการใช้ฐานข้อมูล SQL มาตรฐาน (ปัจจุบันทำงานกับ MySQL เป็นส่วนใหญ่) ฉันยังไม่ได้ใช้ในการใช้งานมากมายในตอนนี้ เมื่อใดและเพราะเหตุใดจึงมีประโยชน์ที่จะมีการทำดัชนีคีย์ (หรือค่อนข้างเซ็นสัญญา) ลบตาราง?

5
จัดกลุ่มตามชั่วโมงในชุดข้อมูลขนาดใหญ่
ใช้ MS SQL 2008 ฉันกำลังเลือกเขตข้อมูลเฉลี่ยจาก 2.5 ล้านระเบียน แต่ละระเบียนแสดงถึงหนึ่งวินาที MyField เป็นค่าเฉลี่ยรายชั่วโมงของบันทึก 1 วินาทีเหล่านั้น แน่นอนว่าซีพียูเซิร์ฟเวอร์ฮิต 100% และการเลือกใช้เวลานานเกินไป ฉันจำเป็นต้องบันทึกค่าเฉลี่ยเหล่านั้นเพื่อให้ SQL ไม่จำเป็นต้องเลือกระเบียนเหล่านั้นทั้งหมดในแต่ละคำขอ สิ่งที่สามารถทำได้? SELECT DISTINCT CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as VARCHAR) AS TimeStampHour, MIN([timestamp]) as TimeStamp, AVG(MyField) As AvgField FROM MyData WHERE TimeStamp > '4/10/2011' GROUP BY CONVERT(VARCHAR, [timestamp], 1)+' '+ CAST(DATEPART(Hh,[timestamp]) as …
12 sql-server  query 

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