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

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

3
การแบ่งพาร์ติชันตารางช่วยได้อย่างไร
ฉันมีปัญหาในการคว้าความคิดของข้อดีและข้อเสียของการแบ่งตาราง ฉันกำลังจะเริ่มทำงานในโครงการซึ่งจะมี 8 ตารางและหนึ่งในนั้นจะเป็นตารางข้อมูลหลักที่จะเก็บบันทึก 180-260 ล้าน เนื่องจากมันจะถูกทำดัชนีตารางอย่างถูกต้องดังนั้นฉันคิดว่าการ จำกัด ระเบียนของตารางไว้ที่ 20 ล้านด้วยวิธีนี้ฉันจะต้องสร้างตาราง 9-13 แต่ฉันไม่แน่ใจว่ามันจะปรับปรุงประสิทธิภาพได้อย่างไรเพราะพวกเขาจะนั่งอยู่บนเครื่องเดียวกัน (32GB RAM)? ฉันใช้ MySQL และตารางจะเป็น MyISAM และตารางใหญ่จะมีดัชนีในฟิลด์ id และไม่มีความซับซ้อนเพิ่มเติมเช่นการค้นหาข้อความแบบเต็มเป็นต้น โปรดแสดงการแบ่งตารางเทียบกับการแบ่งพาร์ติชันฐานข้อมูลด้วย

3
การเพิ่มคอลัมน์ในตารางการผลิต
วิธีที่ดีที่สุดในการเพิ่มคอลัมน์ในตารางการผลิตขนาดใหญ่บน SQL Server 2008 R2 คืออะไร ตามหนังสือของ Microsoft ทางออนไลน์: การเปลี่ยนแปลงที่ระบุใน ALTER TABLE จะถูกนำไปใช้งานทันที หากการเปลี่ยนแปลงนั้นต้องการการแก้ไขแถวในตาราง ALTER TABLE จะอัพเดตแถว ALTER TABLE ได้รับ schema แก้ไขการล็อกบนตารางเพื่อให้แน่ใจว่าไม่มีการอ้างอิงการเชื่อมต่ออื่น ๆ แม้แต่ข้อมูลเมตาสำหรับตารางในระหว่างการเปลี่ยนแปลงยกเว้นการดำเนินการดัชนีออนไลน์ที่ต้องใช้การล็อค SCH-M ที่สั้นมากในตอนท้าย (http://msdn.microsoft.com/en-us/library/ms190273.aspx) บนโต๊ะขนาดใหญ่ที่มีแถวนับล้านแถวอาจใช้เวลาสักครู่ การดับเป็นตัวเลือกเดียวหรือไม่ วิธีที่ดีที่สุดในการจัดการกับสถานการณ์เช่นนี้คืออะไร?

5
ฉันจะรันสคริปต์ขนาดใหญ่ที่มีส่วนแทรกจำนวนมากโดยไม่ใช้หน่วยความจำไม่เพียงพอได้อย่างไร
คำถาม: ฉันมีสคริปต์ที่มีการแทรกประมาณ 45,000 รายการจากคำสั่งที่เลือก เมื่อฉันลองและเรียกใช้ฉันได้รับข้อความแสดงข้อผิดพลาดระบุว่าฉันมีหน่วยความจำไม่เพียงพอ ฉันจะทำให้สคริปต์นี้ทำงานได้อย่างไร บริบท: เพิ่มเขตข้อมูลใหม่บางส่วนเพื่อให้แอปพลิเคชันเล่นได้ดีกับแอปอื่นที่ลูกค้าใช้ มีสเปรดชีตข้อมูลจากลูกค้าที่เต็มไปด้วยข้อมูลที่แมปไอเท็มข้อมูลปัจจุบันกับค่าสำหรับฟิลด์ใหม่เหล่านี้ แปลงสเปรดชีตเพื่อแทรกคำสั่ง ถ้าฉันใช้คำสั่งบางคำสั่งใช้งานได้ แต่สคริปต์ทั้งหมดไม่ทำงาน ไม่ไม่มีการพิมพ์ผิด หากมีวิธีอื่นที่ฉันควรจะโหลดข้อมูลนี้เพื่อลงโทษฉันและแจ้งให้เราทราบ

4
MySQL InnoDB เกิดความผิดพลาดหลังจากโพสต์
เช้านี้ MySQL ก็พบกับฉัน ด้วยข้อยกเว้นของมาตรฐาน MySQL รวมฐานข้อมูลทุกอย่างที่ฉันใช้คือ InnoDB ฉันพยายามรีสตาร์ท MySQL daemon แต่ล้มเหลวสองครั้ง ฉันรีสตาร์ทเซิร์ฟเวอร์ทั้งหมดและ MySQL เริ่มต้นอย่างถูกต้องและทำงานได้ดีตั้งแต่นั้น ไฟล์บันทึก mysqld สำหรับความผิดพลาดครั้งแรกมีดังต่อไปนี้: 120927 10:21:05 mysqld_safe Number of processes running now: 0 120927 10:21:06 mysqld_safe mysqld restarted 120927 10:21:12 [Note] Plugin 'FEDERATED' is disabled. 120927 10:21:12 InnoDB: The InnoDB memory heap is disabled 120927 10:21:12 InnoDB: …

3
Views จะปรับให้เหมาะสมเมื่อฉันเพิ่มส่วนคำสั่ง WHERE กับพวกเขาหรือไม่
มันสร้างความแตกต่างหรือไม่ถ้าคุณกรองมุมมองภายในหรือภายนอกมุมมอง ตัวอย่างเช่นมีข้อแตกต่างระหว่างสองข้อความค้นหานี้หรือไม่ SELECT Id FROM MyTable WHERE SomeColumn = 1 หรือ SELECT Id FROM MyView WHERE SomeColumn = 1 และMyViewถูกกำหนดให้เป็น SELECT Id, SomeColumn FROM MyTable และเป็นคำตอบที่แตกต่างกันหรือไม่หากตารางต้นฉบับตั้งอยู่บนเซิร์ฟเวอร์ที่เชื่อมโยง ฉันถามเพราะฉันต้องค้นหาตารางขนาดใหญ่ (44mil แถว) สองครั้งจากเซิร์ฟเวอร์ที่เชื่อมโยงและรับผลรวม ฉันต้องการทราบว่าฉันควรสร้างสองมุมมองเพื่อเข้าถึงข้อมูลหรือไม่สำหรับแต่ละแบบสอบถามหรือถ้าฉันสามารถออกไปได้ด้วยมุมมองเดียวและWHEREประโยค

6
จัดเรียงเร็กคอร์ดในตารางโดยพลการ
ความต้องการทั่วไปเมื่อใช้ฐานข้อมูลคือการเข้าถึงระเบียนตามลำดับ ตัวอย่างเช่นถ้าฉันมีบล็อกฉันต้องการจัดลำดับโพสต์บล็อกของฉันใหม่ตามลำดับที่กำหนดเอง รายการเหล่านี้มักจะมีความสัมพันธ์มากมายดังนั้นฐานข้อมูลเชิงสัมพันธ์จึงดูสมเหตุสมผล วิธีแก้ปัญหาทั่วไปที่ฉันได้เห็นคือการเพิ่มคอลัมน์จำนวนเต็มorder: CREATE TABLE AS your_table (id, title, sort_order) AS VALUES (0, 'Lorem ipsum', 3), (1, 'Dolor sit', 2), (2, 'Amet, consect', 0), (3, 'Elit fusce', 1); จากนั้นเราสามารถจัดเรียงแถวตามorderเพื่อรับพวกเขาในลำดับที่เหมาะสม อย่างไรก็ตามดูเหมือนว่าเงอะงะ: ถ้าฉันต้องการย้ายระเบียน 0 ไปยังจุดเริ่มต้นฉันต้องเรียงลำดับใหม่ทุกระเบียน ถ้าฉันต้องการแทรกระเบียนใหม่ที่อยู่ตรงกลางฉันต้องเรียงลำดับใหม่ทุกระเบียนหลังจากนั้น หากฉันต้องการลบบันทึกฉันต้องเรียงลำดับใหม่ทุกระเบียนหลังจากนั้น มันง่ายที่จะจินตนาการถึงสถานการณ์เช่น: สองบันทึกมีเหมือนกัน order มีช่องว่างในorderระหว่างบันทึก สิ่งเหล่านี้สามารถเกิดขึ้นได้ง่าย ๆ ด้วยเหตุผลหลายประการ นี่เป็นวิธีการที่แอพพลิเคชั่นอย่าง Joomla ใช้: คุณสามารถยืนยันได้ว่าอินเทอร์เฟซที่นี่ไม่ดีและแทนที่จะเป็นมนุษย์แก้ไขตัวเลขโดยตรงพวกเขาควรใช้ลูกศรหรือลากและวาง - และคุณอาจถูกต้อง แต่เบื้องหลังสิ่งเดียวกันกำลังเกิดขึ้น …

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

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

2
วิธีการตัดบรรทัดยาวเมื่อเลือกคอลัมน์ข้อความ SQL?
ฉันกำลังเลือกจากตารางที่มีคอลัมน์ข้อความยาว ๆ ฉันต้องการตัดบรรทัดยาวให้เป็นความยาวบรรทัดสูงสุด จาก: SELECT * FROM test; test_id | text --------+----------------------------------------------------------------------- 1 | Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris lorem ไปที่: test_id | text --------+----------------------------- 1 | Lorem ipsum dolor sit amet,+ | consectetur adipiscing elit+ | . Mauris lorem
28 postgresql 

3
ฉันจะเปลี่ยนเอ็นจิ้นการจัดเก็บเริ่มต้นใน phpmyadmin ได้อย่างไร?
ฉันใช้ InnoDB เกือบทั้งหมดในแอปพลิเคชันของฉัน อย่างไรก็ตามถ้าฉันไม่ระวังเมื่อทำการตั้งค่าตารางฉันลืมที่จะเปลี่ยนและ phpmyadmin เกาะติดฉันด้วย MyISAM มีวิธีในการเปลี่ยนเอ็นจิ้นการจัดเก็บข้อมูลเริ่มต้นหรือไม่?

4
วิธีอัปเดตตารางจากตารางอื่น
ฉันมีหนึ่งตาราง A มีคอลัมน์ (id, field_1, field_2) และอีกตาราง B มีคอลัมน์ (id, field_2) ตอนนี้ฉันต้องการรวมตาราง B ถึง A นั่นหมายความว่าฉันต้องการอัปเดต field_2 ในตาราง A เป็นมูลค่าของตาราง B ดังนั้นจะนำไปใช้อย่างไร BTW ฉันใช้ Oracle ขอบคุณ
28 oracle 

3
INSERT ที่มีประสิทธิภาพเข้าสู่ตารางที่มีดัชนีเป็นกลุ่ม
ฉันมีคำสั่ง SQL ที่แทรกแถวลงในตารางที่มีดัชนีคลัสเตอร์ในคอลัมน์ TRACKING_NUMBER เช่น: INSERT INTO TABL_NAME (TRACKING_NUMBER, COLB, COLC) SELECT TRACKING_NUMBER, COL_B, COL_C FROM STAGING_TABLE คำถามของฉันคือ - มันช่วยในการใช้คำสั่งย่อย ORDER BY ในคำสั่ง SELECT สำหรับคอลัมน์ดัชนีคลัสเตอร์หรือไม่หรือการได้รับผลประโยชน์ใด ๆ จะได้รับผลกระทบจากการเรียงลำดับพิเศษที่จำเป็นสำหรับคำสั่ง ORDER BY?

3
ฉันจะบังคับใช้การเขียนครั้งเดียวจากนั้นอ่านตารางฐานข้อมูลเท่านั้นใน SQL ได้อย่างไร
เป็นไปได้ไหม กรณีการใช้งานของฉันคือตารางบัญชีแยกประเภทที่มีข้อกำหนดว่าเมื่อสร้างเรกคอร์ดแล้วควรเป็นแบบอ่านอย่างเดียวนั่นคือไม่มีใครสามารถแก้ไขหรือลบได้ นี้ใช้กับตารางบัญชีแยกประเภทและตารางที่มีความสัมพันธ์โดยตรงกับมัน - มีตารางอื่น ๆ ในสคีมาเดียวกันซึ่งจะมีการปรับปรุง / ลบตามปกติ ความเข้าใจของฉันคือเพื่อความสมบูรณ์ของข้อมูลข้อ จำกัด เหล่านี้ควรนำไปใช้กับเลเยอร์ฐานข้อมูล แต่ฉันไม่สามารถหาวิธีที่สะอาดและเป็นที่ยอมรับในการทำสิ่งนี้ได้ - นี่เป็นกรณีการใช้งานที่ฉันควรจะทำได้ดีกว่า ในชั้นสมัครหรือไม่ อุดมคติจะเป็นวิธีที่จะทำใน SQL ธรรมดาเพื่อให้ไม่เชื่อในสิ่งที่ใช้แพลตฟอร์ม DB เนื่องจากอาจมีการเปลี่ยนแปลง แต่ฉันรู้ว่าอาจจะมากเกินไปที่จะขอดังนั้นถ้ามันมี จะขึ้นอยู่กับแพลตฟอร์มต้องการรสชาติของ MySQL บางอย่าง ขอขอบคุณ!
28 mysql  constraint 

1
ฟังก์ชัน Postgres จะกำหนดผลลัพธ์ของแบบสอบถามให้กับตัวแปรหลายตัว
ฉันต้องการกำหนดค่าให้กับตัวแปร 2 ตัวดังต่อไปนี้ในฟังก์ชัน Postgres a := select col1 from tbl where ... b := select col2 from tbl where ... ฉันจะกำหนด 2 ค่าให้กับ 2 ตัวแปรในคำสั่งหนึ่งบรรทัดได้อย่างไร ชอบ a,b := select col1,col2 from tbl where ...


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