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

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

3
ข้อเสียของการใช้ UUID หรือ GUID เป็นคีย์หลักคืออะไร
ฉันต้องการสร้างระบบแบบกระจาย ฉันต้องการจัดเก็บข้อมูลในฐานข้อมูลและจะเป็นประโยชน์ในการใช้UUIDหรือGUIDเป็นคีย์หลักในบางตาราง ฉันคิดว่ามันเป็นข้อเสียของการออกแบบนี้เนื่องจาก UUID / GUID ค่อนข้างใหญ่และพวกมันเกือบจะสุ่ม ทางเลือกคือการใช้ INT เพิ่มขึ้นอัตโนมัติหรือยาว ข้อเสียของการใช้ UUID หรือ GUID เป็นคีย์หลักสำหรับตารางของฉันคืออะไร ฉันอาจจะใช้ Derby / JavaDB (บนไคลเอนต์) และ PostgreSQL (บนเซิร์ฟเวอร์) เป็น DBMS

2
สร้างดัชนีหากไม่มีอยู่
ฉันกำลังทำงานกับฟังก์ชั่นที่อนุญาตให้ฉันเพิ่มดัชนีหากไม่มีอยู่ ฉันพบปัญหาที่ฉันไม่สามารถรับรายการดัชนีเพื่อเปรียบเทียบได้ ความคิดใด ๆ นี่เป็นปัญหาที่คล้ายคลึงกับการสร้างคอลัมน์ที่แก้ไขด้วยรหัสนี้: https://stackoverflow.com/a/12603892/368511

5
เขียนความแตกต่างระหว่าง varchar และ nvarchar
ขณะนี้อยู่ในฐานข้อมูลของเรา SQL Server 2012, เรากำลังใช้และเราต้องการที่จะเปลี่ยนที่varchar nvarcharฉันสร้างสคริปต์ขึ้นมาแล้ว คำถามของฉันมีความแตกต่างในวิธี SQL Server เขียนไปยังvarcharคอลัมน์กับnvarcharคอลัมน์? เรามีขั้นตอนการแบ็กเอนด์ที่ฉันกังวล แก้ไข: ไม่แน่ใจว่าสิ่งนี้ช่วยได้หรือไม่ แต่คอลัมน์ไม่มีดัชนี, f / k หรือข้อ จำกัด

6
เกี่ยวกับประสิทธิภาพของฐานข้อมูลแบบเธรดเดียวกับเธรดแบบมัลติเธรด
H2 เป็นฐานข้อมูลเธรดเดียวที่มีชื่อเสียงที่ดีเกี่ยวกับประสิทธิภาพ ฐานข้อมูลอื่นเป็นแบบมัลติเธรด คำถามของฉันคือ: ฐานข้อมูลแบบหลายเธรดน่าสนใจกว่าฐานข้อมูลเธรดเดียวเมื่อใด มีผู้ใช้กี่คน? มีกี่กระบวนการ ทริกเกอร์คืออะไร? ใครบ้างมีประสบการณ์แบ่งปัน สรุป คอขวดปกติคือการเข้าถึงดิสก์ SSD นั้นเร็ว แต่เปราะบาง (ต้องมีขั้นตอนการทำงานล้มเหลว) ข้อความค้นหายาวหนึ่งข้อความในระบบเธรดเดียวจะบล็อกข้อความอื่น ๆ ทั้งหมด การกำหนดค่าระบบมัลติเธรดสามารถยุ่งยากได้ ฐานข้อมูลแบบมัลติเธรดมีประโยชน์แม้ในระบบแกนเดี่ยว

3
ประสิทธิภาพของการใช้ CHAR กับ VARCHAR ในฟิลด์ขนาดคงที่คืออะไร
ฉันมีคอลัมน์ที่จัดทำดัชนีซึ่งจัดเก็บ MD5 แฮช ดังนั้นคอลัมน์จะเก็บค่า 32 อักขระเสมอ ไม่ว่าจะด้วยเหตุผลใดก็ตามสิ่งนี้ถูกสร้างขึ้นเป็น varchar แทนที่จะเป็นถ่าน มันคุ้มค่าปัญหาของการโยกย้ายฐานข้อมูลเพื่อแปลงเป็นถ่านหรือไม่ นี่คือใน MySQL 5.0 พร้อม InnoDB

4
ความแตกต่างระหว่างจำนวนที่เลือก (*) และจำนวนที่เลือก (any_non_null_column) คืออะไร
ฉันดูเหมือนจะจำไว้ว่า (ใน Oracle) มีความแตกต่างระหว่างการเปล่งเสียงและselect count(*) from any_tableselect count(any_non_null_column) from any_table อะไรคือความแตกต่างระหว่างสองข้อความนี้ถ้ามี?
58 oracle  aggregate  count  null 

3
ค้นหาระดับสูงสุดของฟิลด์ลำดับชั้น: ด้วย vs ไม่มี CTEs
หมายเหตุ: คำถามนี้ได้รับการปรับปรุงเพื่อสะท้อนให้เห็นว่าขณะนี้เรากำลังใช้ MySQL โดยทำเช่นนั้นฉันอยากจะดูว่ามันจะง่ายกว่านี้ถ้าเราเปลี่ยนไปใช้ฐานข้อมูลที่สนับสนุน CTE ผมมีตารางอ้างอิงตนเองกับคีย์หลักและต่างประเทศที่สำคัญidparent_id +------------+--------------+------+-----+---------+----------------+ | Field | Type | Null | Key | Default | Extra | +------------+--------------+------+-----+---------+----------------+ | id | int(11) | NO | PRI | NULL | auto_increment | | parent_id | int(11) | YES | | NULL | | | name | varchar(255) | …

11
ฉันจะตั้งชื่อช่องเวลาที่ดีที่สุดได้อย่างไร
เมื่อฉันต้องการสร้างเขตข้อมูลบันทึกเวลา (หรือเขตข้อมูลสไตล์วันที่ / เวลา) เป็นวิธีที่ดีที่สุดในการตั้งชื่อเขตข้อมูลเหล่านั้นคืออะไร ฉันควรใส่ record_timestamp หรือไม่

5
วิธีการเลือกแถวแรกของแต่ละกลุ่ม?
ฉันมีโต๊ะแบบนี้: ID | Val | Kind ---------------------- 1 | 1337 | 2 2 | 1337 | 1 3 | 3 | 4 4 | 3 | 4 ฉันต้องการที่จะทำให้การSELECTที่จะกลับมาเพียงแค่แถวแรกสำหรับแต่ละการสั่งซื้อโดยValKind ตัวอย่างผลลัพธ์: ID | Val | Kind ---------------------- 2 | 1337 | 1 3 | 3 | 4 ฉันจะสร้างแบบสอบถามนี้ได้อย่างไร

9
คุณควรออกแบบฐานข้อมูลก่อนที่จะเขียนรหัสแอปพลิเคชันหรือไม่
วิธีที่ง่ายที่สุดและมีประสิทธิภาพที่สุดในการออกแบบฐานข้อมูลคืออะไร? จากมุมมองของฉันมีสองตัวเลือกสำหรับการออกแบบที่เก็บข้อมูลของแอปพลิเคชัน: การออกแบบฐานข้อมูลที่ดีที่สุดเท่าที่คุณสามารถเริ่มแรกก่อนที่จะเขียนรหัสโปรแกรมใด ๆ สิ่งนี้จะช่วยให้คุณได้เปรียบของการมีโครงสร้างข้อมูลพื้นฐานในการทำงาน ในความคิดของฉันข้อเสียคือคุณจะมีการเปลี่ยนแปลงมากมายเนื่องจากข้อมูลเฉพาะของแอปพลิเคชันที่ส่งผลต่อการเปลี่ยนแปลงของข้อมูล / ที่ไหน / อย่างไรตลอดวงจรการพัฒนาแอปพลิเคชัน การออกแบบฐานข้อมูลเป็นแอพลิเคชันมาเพื่อการบรรลุผล เมื่อคุณต้องการวัตถุฐานข้อมูลบางอย่างเมื่อคุณเขียนแอปพลิเคชันคุณจะพัฒนาฐานข้อมูลแบบขนาน (ตามลำดับเวลา) ไปยังแอปพลิเคชัน ข้อดีจะเปลี่ยนโครงสร้างฐานข้อมูลน้อยลงตามที่ฉันเห็น ข้อเสียคือการแบ่งเวลาและความพยายามในการพัฒนาระหว่างรหัสแอปพลิเคชันและการพัฒนาฐานข้อมูล จากประสบการณ์ของคุณสิ่งใดที่คุณคิดว่าเป็นวิธีที่มีประสิทธิผลและมีประสิทธิภาพมากที่สุด

7
การเขียนโครงสร้างธนาคารอย่างง่าย: ฉันจะรักษายอดคงเหลือของฉันให้สอดคล้องกับประวัติการทำธุรกรรมได้อย่างไร
ฉันกำลังเขียนคีสำหรับฐานข้อมูลธนาคารที่เรียบง่าย นี่คือคุณสมบัติพื้นฐาน: ฐานข้อมูลจะเก็บธุรกรรมกับผู้ใช้และสกุลเงิน ผู้ใช้ทุกคนมียอดดุลหนึ่งรายการต่อหนึ่งสกุลเงินดังนั้นแต่ละยอดดุลเป็นเพียงผลรวมของธุรกรรมทั้งหมดต่อผู้ใช้และสกุลเงิน ยอดคงเหลือต้องไม่ติดลบ แอปพลิเคชันธนาคารจะสื่อสารกับฐานข้อมูลผ่านขั้นตอนการจัดเก็บ ฉันคาดหวังว่าฐานข้อมูลนี้จะยอมรับการทำธุรกรรมใหม่หลายแสนรายการต่อวันรวมทั้งคำสั่งยอดคงเหลือในลำดับความสำคัญที่สูงขึ้น ในการให้บริการยอดคงเหลืออย่างรวดเร็วฉันต้องรวมไว้ล่วงหน้า ในเวลาเดียวกันฉันต้องรับประกันว่ายอดเงินจะไม่ขัดแย้งกับประวัติการทำธุรกรรม ตัวเลือกของฉันคือ: มีbalancesตารางแยกต่างหากและทำสิ่งใดสิ่งหนึ่งต่อไปนี้: ใช้ธุรกรรมกับทั้งtransactionsและbalancesตาราง ใช้TRANSACTIONตรรกะในเลเยอร์ของโพรซีเดอร์ที่เก็บไว้เพื่อให้แน่ใจว่ายอดคงเหลือและการทำธุรกรรมมีการซิงค์อยู่เสมอ (รองรับโดยแจ็ค ) ใช้ธุรกรรมกับtransactionsตารางและมีทริกเกอร์ที่อัปเดตbalancesตารางให้ฉันด้วยจำนวนธุรกรรม ใช้ธุรกรรมกับbalancesตารางและมีทริกเกอร์ที่เพิ่มรายการใหม่ในtransactionsตารางให้ฉันด้วยจำนวนธุรกรรม ฉันต้องพึ่งพาวิธีการรักษาความปลอดภัยเพื่อให้แน่ใจว่าไม่มีการเปลี่ยนแปลงใด ๆ นอกกระบวนการที่เก็บไว้ มิฉะนั้นตัวอย่างเช่นกระบวนการบางอย่างสามารถแทรกธุรกรรมลงในtransactionsตารางโดยตรงและภายใต้โครงการ1.3ยอดคงเหลือที่เกี่ยวข้องจะไม่ซิงค์กัน มีbalancesมุมมองที่จัดทำดัชนีที่รวมการทำธุรกรรมอย่างเหมาะสม เครื่องมือเก็บข้อมูลรับประกันยอดคงเหลือเพื่อให้สอดคล้องกับการทำธุรกรรมของพวกเขาดังนั้นฉันไม่จำเป็นต้องพึ่งพาวิธีการรักษาความปลอดภัยเพื่อรับประกันสิ่งนี้ ในทางกลับกันฉันไม่สามารถบังคับยอดคงเหลือให้เป็นค่าที่ไม่เป็นลบได้อีกต่อไปนับตั้งแต่การดู - แม้แต่การดูที่มีการจัดทำดัชนี - ไม่สามารถมีCHECKข้อ จำกัด ได้ (สนับสนุนโดยDenny ) มีเพียงtransactionsตารางแต่มีคอลัมน์เพิ่มเติมเพื่อจัดเก็บยอดคงเหลือที่มีประสิทธิภาพหลังจากทำรายการนั้นแล้ว ดังนั้นบันทึกธุรกรรมล่าสุดสำหรับผู้ใช้และสกุลเงินจึงมียอดดุลปัจจุบัน (แนะนำโดยAndrewด้านล่าง; ตัวแปรที่เสนอโดยgarik ) ครั้งแรกที่ผมจัดการปัญหานี้ผมอ่านเหล่านี้ สอง2การอภิปรายและการตัดสินใจในตัวเลือก สำหรับการอ้างอิงคุณสามารถดูการดำเนินงานที่เปลือยกระดูกของมันนี่ คุณออกแบบหรือจัดการฐานข้อมูลเช่นนี้ด้วยโปรไฟล์การโหลดสูงหรือไม่ คุณมีวิธีแก้ไขปัญหานี้อย่างไร คุณคิดว่าฉันได้เลือกการออกแบบที่ถูกต้องหรือไม่? มีอะไรบ้างที่ฉันควรจำไว้? ตัวอย่างเช่นฉันรู้ว่าการเปลี่ยนสคีมาในtransactionsตารางจะต้องมีการสร้างbalancesมุมมองใหม่ แม้ว่าฉันจะเก็บถาวรธุรกรรมเพื่อทำให้ฐานข้อมูลมีขนาดเล็ก (เช่นย้ายไปที่อื่นและแทนที่ด้วยธุรกรรมสรุป) การสร้างมุมมองใหม่จากการทำธุรกรรมหลายสิบล้านครั้งด้วยการปรับปรุง schema ทุกครั้งอาจหมายถึงการหยุดทำงานต่อการปรับใช้ …

4
แบบสอบถาม PostgreSQL เดียวสามารถใช้หลายคอร์ได้หรือไม่?
ในรุ่นล่าสุดของ PostgreSQL (ณ เดือนธันวาคม 2013) เราสามารถแบ่งปันแบบสอบถามระหว่างสองคอร์หรือมากกว่านั้นเพื่อรับประสิทธิภาพที่เพิ่มขึ้นได้หรือไม่ หรือเราควรจะได้รับแกนเร็วขึ้น?


8
อะไรคือความแตกต่างระหว่าง "บันทึก" และ "แถว" ใน SQL Server
มีคำถามที่ค่อนข้างอันตรายเกี่ยวกับการเพิ่มวันที่และเวลาใน SQL Serverที่ตั้งปิดการอภิปรายอนุกรมวิธานค่อนข้างน่าสนใจ ดังนั้นเราจะแยกความแตกต่างระหว่างคำที่เกี่ยวข้องเหล่านี้และวิธีการใช้งานอย่างถูกต้องได้อย่างไร แถว บันทึก

5
เหตุใดการเปลี่ยนแปลงคอลัมน์ไม่เป็นศูนย์ทำให้เกิดการเติบโตของไฟล์บันทึกขนาดใหญ่
ฉันมีตารางที่มีแถว 64 ม. ที่ใช้ดิสก์ 4.3 GB สำหรับข้อมูล แต่ละแถวมีประมาณ 30 ไบต์ของคอลัมน์จำนวนเต็มบวกNVARCHAR(255)คอลัมน์ตัวแปรสำหรับข้อความ ฉันเพิ่ม AA คอลัมน์ nullable Datetimeoffset(0)กับข้อมูลประเภท จากนั้นฉันก็อัพเดทคอลัมน์นี้สำหรับทุกแถวและตรวจสอบให้แน่ใจว่าเม็ดมีดใหม่ทั้งหมดวางค่าในคอลัมน์นี้ เมื่อไม่มีรายการ NULL ฉันก็วิ่งคำสั่งนี้เพื่อให้ฟิลด์ใหม่ของฉันได้รับคำสั่ง: ALTER TABLE tblCheckResult ALTER COLUMN [dtoDateTime] [datetimeoffset](0) NOT NULL ผลที่ได้คือการเติบโตอย่างมากในขนาดของบันทึกการทำธุรกรรม - จาก 6GB เป็นมากกว่า 36GB จนกว่าจะหมดพื้นที่! ไม่มีใครมีความคิดอะไรในโลก SQL Server 2008 R2 ที่กำลังทำอยู่สำหรับคำสั่งง่ายๆนี้เพื่อให้เกิดการเติบโตอย่างมาก

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