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

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

5
วิธีเลือกจากผลลัพธ์สถานะแสดงตาราง
ฉันต้องการ จำกัด แถวและคอลัมน์ที่กลับมาจาก SHOW TABLE STATUS คำสั่งใน MySQL 5.1 มีวิธีรับข้อมูลเดียวกันนี้ผ่านSELECTคำสั่งเพื่อให้ฉันสามารถจัดการผลลัพธ์ในลักษณะปกติได้หรือไม่
36 mysql  select 

5
ทำไมถึงมีประเภทข้อมูล varchar อยู่?
ฐานข้อมูลของฉันหลายแห่งมีเขตข้อมูลที่กำหนดเป็น varchars นี่ไม่ได้เป็นปัญหามากนักตั้งแต่ฉันอาศัยและทำงานในอเมริกา (ภาษาเดียวที่มีอยู่คือ "อเมริกัน" อะแฮ่ม ) หลังจากทำงานกับฐานข้อมูลประมาณ 5 ปีฉันก็พบว่าในที่สุดฉันก็พบปัญหาเกี่ยวกับลักษณะที่ จำกัด ของเขตข้อมูล varchar และฉันต้องแก้ไขเขตข้อมูลของฉันเพื่อเก็บข้อมูลเป็น nvarchars หลังจากต้องทำการอัปเดตอีกครั้งในตารางการแปลงเขตข้อมูล varchar เป็น nvarchar ฉันเพิ่งคิดว่า - ทำไมเรายังคงทำเช่นนี้อยู่ ฉันตัดสินใจที่จะกำหนดเขตข้อมูลใหม่ทั้งหมดของฉันเป็น nvarchar แทน varchar ซึ่งเป็นสิ่งที่ฉันเรียนรู้ที่จะทำจากหนังสือเรียนเมื่อตอนที่ฉันอยู่โรงเรียนเมื่อ 10 ปีที่แล้ว ในปี 2554 และมี SQL Server รุ่นใหม่เมื่อปีที่แล้ว ทำไมเรายังคงสนับสนุนประเภทข้อมูล varchar เมื่อเราสามารถ / ควรใช้ nvarchar แทน? ฉันรู้ว่ามันมักจะเป็นที่ถกเถียงกันอยู่ว่า nvarchars เป็น "ใหญ่เป็นสองเท่า" เป็น varchars ดังนั้นการใช้พื้นที่เก็บข้อมูลอาจเป็นหนึ่งในการโต้แย้งสำหรับ maitaining …

10
เรียกคืนตารางจากไฟล์. frm และ. ibd หรือไม่
ก่อนหน้านี้ฉันได้บันทึกสำเนาของไดเรกทอรี / var / lib / mysql / ddms ("ddms" เป็นชื่อสคีมา) ตอนนี้ฉันติดตั้ง MySQL ใหม่บน Ubuntu 10.04.3 LTS ที่เพิ่งติดตั้งใหม่โดยใช้งานapt-get install mysql-serverฉันเชื่อว่าเวอร์ชัน 5.1 ได้รับการติดตั้งแล้ว หลังจากที่ฉันคัดลอกไดเรกทอรี ddms ภายใต้ / var / lib / mysql บางส่วนของตารางทำงานได้ดีเหล่านี้เป็นตารางที่มีชุดของไฟล์สามไฟล์ที่เกี่ยวข้อง: ไฟล์. frm, ไฟล์. MYM และไฟล์. MYI อย่างไรก็ตามมีสองตารางที่มีชุดไฟล์ต่างกัน: ไฟล์. frm และไฟล์. ibd สองตารางนี้ไม่แสดงในรายการตารางใน phpMyAdmin เมื่อฉันดูบันทึกข้อผิดพลาดจะมีข้อความแจ้งว่า: [ERROR] Cannot find or …
36 mysql  innodb 

6
อะไรคือความแตกต่างระหว่าง“ ขั้นตอนการจัดเก็บ” และ“ ฟังก์ชั่นที่จัดเก็บ”?
ดังนั้นความคิดเห็นจากคำถามนี้กล่าวว่ามีความแตกต่างกันเล็กน้อยใน "วิธีการจัดเก็บ" และ "จัดเก็บ funtions" ใน PostgreSQL ความคิดเห็นเชื่อมโยงไปยังบทความวิกิพีเดียแต่บางส่วนดูเหมือนจะไม่นำไปใช้ (เช่นสามารถนำไปใช้ในการSELECTแถลง) ไวยากรณ์ตัวเองดูเหมือนจะสับสนนิด ๆ หน่อย ๆ : CREATE FUNCTION emp_stamp() RETURNS trigger AS $emp_stamp$ BEGIN [...] END; $emp_stamp$ LANGUAGE plpgsql; CREATE TRIGGER emp_stamp BEFORE INSERT OR UPDATE ON emp FOR EACH ROW EXECUTE PROCEDURE emp_stamp(); คุณสามารถสร้างแต่หมายถึงว่ามันเป็นFUNCTIONPROCEDURE ดังนั้นความแตกต่างระหว่างสองสิ่งนี้คืออะไร?

4
การติดตามความคืบหน้าของการสร้างดัชนีใน PostgreSQL
มีวิธีการติดตามความคืบหน้าของการสร้างดัชนีใน PostgreSQL หรือไม่ ฉันกำลังสร้างดัชนีบนโต๊ะขนาดใหญ่และฉันต้องการที่จะดูว่าสิ่งนี้เกิดขึ้นเร็วแค่ไหน มีวิธีตรวจสอบเรื่องนี้หรือไม่?
36 postgresql  index 

1
SQL Server: วิธีการติดตามความคืบหน้าของคำสั่ง CREATE INDEX?
SQL Server 2014, Std Ed ฉันได้อ่านว่า percent_complete ใน dm_exec_requests ใช้ไม่ได้กับ CREATE INDEX และในทางปฏิบัติแล้ว percent_complete sticks ที่ 0 ดังนั้นมันจึงไม่ช่วย ปัจจุบันฉันใช้วิธีการด้านล่างซึ่งอย่างน้อยก็แสดงให้ฉันเห็นการเคลื่อนไหว (ว่าการสร้างดัชนีไม่ได้ถูกบล็อก) แต่ฉันไม่มีความคิดถ้าฉัน% 10 ผ่านกระบวนการหรือ% 99 ฉันลองวิธีที่อธิบายไว้ที่นี่: https://dba.stackexchange.com/a/102545/6229 แต่มันแสดงให้เห็นว่าเวลาเสร็จสิ้นอย่างชัดเจนผิดปกติ (โดยทั่วไปจะแสดง 'ตอนนี้' เป็นเวลา 60 นาทีซึ่งฉันใช้เวลา 10 นาที ) ฉันจะได้รับเบาะแสได้อย่างไร SELECT percent_complete, estimated_completion_time, reads, writes, logical_reads, text_size, * FROM sys.dm_exec_requests AS r WHERE r.session_id …

2
ใน SQL Server วัตถุประสงค์ของการจัดกลุ่มกระบวนงานที่เก็บไว้คืออะไร
หนึ่งในปัญหาที่น่างงที่สุดที่ฉันต้องจัดการกับกลุ่ม Stored Procedure ได้รับการจัดเก็บusp_DoSomethingAwesomeผมสามารถสร้าง proc usp_DoSomethingAwesome;2ในกลุ่มอีกว่าโดยเรียกมันว่า ฉันค้นพบสิ่งนี้เมื่อแก้ไขปัญหาการจำลองแบบบางอย่าง (ผู้เผยแพร่: SQL 2000 Ent., Dist / Sub: 2008 R2 Ent.) ที่เกิดขึ้นกับขั้นตอนการแทรกการปรับปรุงและการจำลองแบบที่สร้างโดยระบบ อะไรคือจุดประสงค์ / ความคิดเบื้องหลังการมีความสามารถ "การจัดกลุ่ม" นี้?

2
ถ้ามีอยู่ใช้เวลานานกว่าคำสั่ง select ฝังตัว
เมื่อฉันเรียกใช้รหัสต่อไปนี้มันใช้เวลา 22.5 นาทีและ 106 ล้านอ่าน อย่างไรก็ตามถ้าฉันเรียกใช้เพียงคำสั่งเลือกภายในด้วยตัวเองมันใช้เวลาเพียง 15 วินาทีและอ่านได้ 264k ในฐานะที่เป็นข้อความด้านแบบสอบถามแบบใช้เลือกข้อมูลจะไม่ส่งกลับระเบียน ความคิดใดที่ว่าทำไมIF EXISTSมันถึงทำให้มันใช้งานได้นานขึ้นและอ่านได้มากขึ้น? ฉันเปลี่ยนคำสั่ง select เป็นสิ่งที่ต้องทำSELECT TOP 1 [dlc].[id]และฉันก็ฆ่ามันหลังจาก 2 นาที ในฐานะที่เป็นแก้ไขชั่วคราวฉันมีการเปลี่ยนแปลงจะทำนับ (*) @cntและกำหนดค่าที่ให้กับตัวแปร จากนั้นจะมีIF 0 <> @cntคำสั่ง แต่ฉันคิดว่าEXISTSจะดีกว่าเพราะถ้ามีการบันทึกกลับมาในคำสั่ง select มันจะหยุดทำการสแกน / ค้นหาเมื่อพบอย่างน้อยหนึ่งระเบียนในขณะที่count(*)จะทำการสืบค้นแบบเต็ม ฉันพลาดอะไรไป IF EXISTS (SELECT [dlc].[ID] FROM TableDLC [dlc] JOIN TableD [d] ON [d].[ID] = [dlc].[ID] JOIN TableC [c] …

2
วิธีที่ดีที่สุดในการแทรกข้อมูลประจำตัวสุดท้ายในตาราง
ตัวเลือกใดเป็นตัวเลือกที่ดีที่สุดในการรับค่าตัวตนที่ฉันเพิ่งสร้างผ่านการแทรก อะไรคือผลกระทบของแถลงการณ์เหล่านี้ในแง่ของประสิทธิภาพ? SCOPE_IDENTITY() ฟังก์ชันการรวม MAX() SELECT TOP 1IdentityColumn จาก TableNameORDER BY IdentityColumn DESC

3
ชนิดข้อมูลที่เหมาะสมที่สุดสำหรับเขตข้อมูล MD5 คืออะไร
เรากำลังออกแบบระบบที่รู้กันว่าอ่านยาก (ตามคำสั่งของการอ่านหมื่นครั้งต่อนาที) มีตารางnamesที่ทำหน้าที่จัดเรียงรีจิสทรีกลาง แต่ละแถวมีtextเขตข้อมูลrepresentationและไม่ซ้ำกันkeyซึ่งเป็นแฮช MD5 ของสิ่งrepresentationนั้น 1ตารางนี้มีระเบียนหลายสิบล้านระเบียนและคาดว่าจะเติบโตเป็นพันล้านตลอดอายุการใช้งานแอปพลิเคชัน มีตารางอื่น ๆ อีกหลายสิบตาราง (ของสคีมาที่แตกต่างกันอย่างมากและจำนวนเรคคอร์ด) ที่อ้างอิงถึงnamesตาราง ระเบียนใดก็ตามที่ระบุในตารางใดตารางหนึ่งเหล่านี้รับประกันว่าจะมี a name_keyซึ่งเป็น foreign key ไปยังnamesตาราง 1: อนึ่งตามที่คุณคาดไว้ระเบียนในตารางนี้จะไม่เปลี่ยนรูปเมื่อมีการเขียน สำหรับตารางใดก็ตามที่ไม่ใช่namesตารางแบบสอบถามที่พบบ่อยที่สุดจะเป็นไปตามรูปแบบนี้: SELECT list, of, fields FROM table WHERE name_key IN (md5a, md5b, md5c...); ฉันต้องการปรับให้เหมาะสมสำหรับการอ่าน ฉันสงสัยว่าจุดแรกของฉันควรจะลดขนาดของดัชนี (แม้ว่าฉันจะไม่ได้รับการพิสูจน์ว่าผิด) คำถาม: อะไรคือ / ชนิดข้อมูลที่ดีที่สุดสำหรับkeyและname_keyคอลัมน์คืออะไร? มีเหตุผลที่จะใช้hex(32)มากกว่าbit(128)? BTREEหรือGIN?

4
รับวันที่แก้ไขล่าสุดของตารางฐานข้อมูล PostgreSQL
ฉันพยายามรับเมื่อตารางของฉันถูกแก้ไขโดยตรวจสอบวันที่แก้ไขไฟล์ตามที่อธิบายไว้ในคำตอบนี้ แต่ผลลัพธ์ไม่ถูกต้องเสมอไป วันที่แก้ไขไฟล์อัปเดตในหลายนาทีหลังจากฉันอัปเดตตาราง มันเป็นพฤติกรรมที่ถูกต้องหรือไม่ PostgreSQL จัดเก็บการดัดแปลงตารางในแคชแล้วล้างออกไปยังฮาร์ดไดรฟ์หรือไม่ ดังนั้นฉันจะได้รับวันที่แก้ไขล่าสุดที่ถูกต้องของตารางได้อย่างไร (สมมติว่าการแก้ไขสูญญากาศอัตโนมัติก็โอเคด้วย) ฉันใช้ PostgreSQL 9.2 ภายใต้ Linux Centos 6.2 x64
35 postgresql 

4
ฉันต้องการลดขนาดฐานข้อมูลของฉัน - ฉันเพิ่งปลดปล่อยพื้นที่มาก
คำถามนี้ถูกถามในรูปแบบต่าง ๆ ที่นี่ แต่คำถามก็ยังลงไปที่: ฉันรู้ว่าการลดขนาดฐานข้อมูลมีความเสี่ยง ในกรณีนี้ฉันได้ลบข้อมูลจำนวนมากและฉันจะไม่ใช้มันอีก ฉันจะลดขนาดฐานข้อมูลของฉันได้อย่างไร ฉันจะลดขนาดไฟล์อะไร สิ่งที่ฉันควรพิจารณาเมื่อทำสิ่งนี้คืออะไร? ฉันควรทำอะไรหลังจาก ถ้าเป็นฐานข้อมูลขนาดใหญ่ล่ะ ฉันสามารถหดมันทีละน้อยกว่าได้ไหม?

2
ความแตกต่างระหว่างชุดคำสั่ง SQL และ RPC หรือไม่
อะไรคือความแตกต่างระหว่างชุดคำสั่ง SQL, คำสั่ง T-SQL และการเรียกขั้นตอนระยะไกล? ฉันจะรู้ได้อย่างไรว่าส่วนหนึ่งของรหัส T-SQL เป็นชุดหรือคำสั่ง?
35 sql-server 

4
ฉันจะทราบได้อย่างไรว่าแบบสอบถาม PostgreSQL ของฉันอยู่ไกลแค่ไหน?
ฉันมีความคิดที่ดีว่าจำนวนคิวรี SELECT ของฉัน ... เข้าสู่กระบวนการจริงจะดำเนินการอย่างไร (เช่นฉันรู้ว่าจะปรากฏเป็นรูปเป็นร่างเท่าใด) ฉันเข้าใจว่า Postgres จะไม่บอกเปอร์เซ็นต์ความครบถ้วนสมบูรณ์มีวิธี (ฝังลึกในบันทึก, ตารางระบบหรืออื่น ๆ ) ที่ฉันสามารถค้นหาจำนวนแถวที่ถูกปั๊มเข้าไปในตารางปลายทางหรืออ่านโดยเลือกคิวรี่ ?
35 postgresql 

1
ลบ vs TRUNCATE
ฉันพยายามทำความเข้าใจกับความแตกต่างระหว่างคำสั่งDELETEและ TRUNCATEความเข้าใจของฉันเกี่ยวกับ internals ไปบางอย่างตาม: DELETE-> เครื่องมือฐานข้อมูลค้นหาและลบแถวออกจากหน้าข้อมูลที่เกี่ยวข้องและหน้าดัชนีทั้งหมดที่ป้อนแถวนั้น ดังนั้นยิ่งดัชนียิ่งใช้เวลาลบนานเท่าใด TRUNCATE -> เพียงแค่ลบหน้าข้อมูลของตารางทั้งหมดออกมาซึ่งจะเป็นตัวเลือกที่มีประสิทธิภาพมากขึ้นสำหรับการลบเนื้อหาของตาราง สมมติว่าข้างต้นถูกต้อง (โปรดแก้ไขให้ฉันถ้าไม่): โหมดการกู้คืนที่แตกต่างกันมีผลต่อแต่ละคำสั่งอย่างไร หากมีผลกระทบใด ๆ เลย เมื่อทำการลบดัชนีทั้งหมดจะถูกสแกนหรือเฉพาะดัชนีที่อยู่แถวนั้น? ฉันจะถือว่าดัชนีทั้งหมดถูกสแกน (และไม่ได้หา?) คำสั่งจำลองอย่างไร? คำสั่ง SQL ส่งและประมวลผลกับผู้สมัครสมาชิกแต่ละคนหรือไม่? หรือ MSSQL ฉลาดกว่านี้สักหน่อย

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