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

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

2
ไม่สามารถเปลี่ยนชื่อคอลัมน์ในมุมมอง PostgreSQL ด้วย CREATE หรือ REPLACE
ใน PostreSQL 8.3 ฉันพยายามสร้างมุมมองซึ่งจะดูเหมือนกับตารางที่มีอยู่ แต่มีชื่อคอลัมน์ที่แตกต่างกัน วิธีนี้ใช้ได้ผล CREATE OR REPLACE VIEW gfam.nice_builds AS SELECT (family_tree.family_tree_id) as x, family_tree.family_tree_name, family_tree.family_tree_description FROM gfam.family_tree; ด้านบนทำซ้ำตาราง family_tree แต่ความพยายามต่อไปนี้ล้มเหลว: CREATE OR REPLACE VIEW gfam.nice_builds AS SELECT (family_tree.family_tree_id) as x, family_tree.family_tree_name, family_tree.family_tree_description FROM gfam.family_tree; ข้อผิดพลาด: ไม่สามารถเปลี่ยนชื่อคอลัมน์มุมมอง "family_tree_id" ฉันจะเปลี่ยนชื่อคอลัมน์ได้อย่างไร
37 postgresql 

2
เหตุใดการใช้ตัวแปรตารางจึงเร็วกว่าตาราง #temp มากกว่าสองเท่าในกรณีเฉพาะนี้
ฉันอ่านบทความที่นี่ Temporary Tables vs. Variables Table และผลกระทบต่อประสิทธิภาพของ SQL Serverและ SQL Server 2008 ก็สามารถสร้างผลลัพธ์ที่คล้ายกันกับผลลัพธ์ที่แสดงในปี 2005 เมื่อดำเนินการตามขั้นตอนที่เก็บไว้ (คำจำกัดความด้านล่าง) โดยมีเพียง 10 แถวรุ่นตัวแปรตารางจะดำเนินการเวอร์ชันตารางชั่วคราวมากกว่าสองครั้ง ฉันเคลียร์แคชโพรซีเดอร์และรันทั้งโพรซีเดอร์ที่เก็บไว้ 10,000 ครั้งจากนั้นทำซ้ำกระบวนการสำหรับการรันอีก 4 ครั้ง ผลลัพธ์ด้านล่าง (เวลาเป็น ms ต่อชุด) T2_Time V2_Time ----------- ----------- 8578 2718 6641 2781 6469 2813 6766 2797 6156 2719 คำถามของฉันคือเหตุผลที่ทำให้ประสิทธิภาพที่ดีขึ้นของรุ่นตัวแปรตารางคืออะไร? ฉันได้ทำการสอบสวนแล้ว เช่นการดูเคาน์เตอร์วัดประสิทธิภาพด้วย SELECT cntr_value from sys.dm_os_performance_counters where …

1
Postgres นับด้วยเงื่อนไขที่แตกต่างกันในแบบสอบถามเดียวกัน
แก้ไข Postgres 9.3 ฉันกำลังทำงานกับรายงานที่มีสคีมาต่อไปนี้: http://sqlfiddle.com/#!15/fd104/2 แบบสอบถามปัจจุบันทำงานได้ดีซึ่งมีลักษณะเช่นนี้: โดยทั่วไปจะเข้าร่วม 3 ตารางภายใน ฉันไม่ได้ทำแบบสอบถามนี้ แต่นักพัฒนาที่ทิ้งไว้และฉันต้องการแก้ไขแบบสอบถาม ในขณะที่คุณสามารถมองเห็นเพียงแค่นับแอพลิเคชันทั้งหมดขึ้นอยู่กับTotalApplication a.agent_idและคุณสามารถดูtotalapplicationคอลัมน์ในผลลัพธ์ได้ สิ่งที่ฉันต้องการคือการลบและเปลี่ยนtotalapplicationเป็นสองคอลัมน์ใหม่ ฉันต้องการเพิ่มcompletedsurveyและpartitalsurveyคอลัมน์ โดยพื้นฐานแล้วส่วนนี้จะกลายเป็น SELECT a.agent_id as agent_id, COUNT(a.id) as CompletedSurvey FROM forms a WHERE a.created_at >= '2015-08-01' AND a.created_at <= '2015-08-31' AND disposition = 'Completed Survey' GROUP BY a.agent_id ฉันเพิ่งเพิ่มAND disposition = 'Completed Survey'แต่ฉันต้องการคอลัมน์อื่นpartialsurveyที่มีข้อความค้นหาเดียวกันโดยมีcompletedsurveyความแตกต่างเพียงอย่างเดียวคือ AND disposition = …

2
Outer Apply vs Left Join Performance
ฉันใช้ SQL Server 2008 R2 ฉันเพิ่งเจอ APPLY ใน SQL และชอบที่จะแก้ปัญหาการสืบค้นสำหรับหลาย ๆ กรณี ตารางจำนวนมากที่ฉันใช้ 2 left join เพื่อให้ได้ผลลัพธ์ฉันสามารถสมัครนอก 1 ครั้งได้ ฉันมีข้อมูลจำนวนเล็กน้อยในตารางฐานข้อมูลท้องถิ่นของฉันและหลังจากการปรับใช้รหัสควรทำงานบนข้อมูลอย่างน้อย 20 ครั้งใหญ่ ฉันกังวลว่าการใช้งานภายนอกอาจใช้เวลานานกว่าเงื่อนไขการเข้าร่วม 2 ด้านซ้ายสำหรับข้อมูลจำนวนมาก ทุกคนสามารถบอกได้ว่าการนำไปใช้งานได้อย่างไรและจะส่งผลต่อประสิทธิภาพการทำงานอย่างไรในข้อมูลที่มีขนาดใหญ่มากถ้าเป็นไปได้ความสัมพันธ์เชิงสัดส่วนกับขนาดของแต่ละตารางเช่นสัดส่วนกับ n1 ^ 1 หรือ n1 ^ 2 ... โดยที่ n1 คือจำนวนแถวในตาราง 1 นี่คือแบบสอบถามที่มี 2 ซ้ายเข้าร่วม select EC.*,DPD.* from Table1 eC left join ( select …

2
ฟังก์ชัน LAST_INSERT_ID () ของ MySql รับประกันว่าถูกต้องหรือไม่
เมื่อฉันทำแถวเดียวINSERTไปยังตารางที่มีAUTO_INCREMENTคอลัมน์ฉันต้องการใช้LAST_INSERT_ID()ฟังก์ชันเพื่อส่งกลับAUTO_INCREMENTค่า ed ' ใหม่ที่เก็บไว้สำหรับแถวนั้น Microsoft SQL Server และผู้ดูแลระบบหลายคนนั้นไม่ต้องสงสัยเลยว่าทราบถึงหน้าที่การใช้งานที่เทียบเท่าใน SQL Server ( SCOPE_IDENTITYและ@@IDENTITY) ที่ไม่เคยมีปัญหามาก่อน ฉันรู้สถานะของเอกสาร MySQL: ID ที่ถูกสร้างขึ้นจะถูกเก็บไว้ในเซิร์ฟเวอร์ในแต่ละการเชื่อมต่อพื้นฐาน ซึ่งหมายความว่าค่าที่ส่งคืนโดยฟังก์ชันไปยังไคลเอนต์ที่กำหนดเป็นAUTO_INCREMENTค่าแรกที่สร้างขึ้นสำหรับคำสั่งล่าสุดที่มีผลต่อAUTO_INCREMENTคอลัมน์โดยไคลเอ็นต์นั้น ค่านี้ไม่สามารถรับผลกระทบจากไคลเอนต์อื่นแม้ว่าพวกเขาสร้างAUTO_INCREMENTค่าของตนเอง พฤติกรรมนี้ทำให้มั่นใจได้ว่าลูกค้าแต่ละคนสามารถดึงข้อมูล ID ของตนเองได้โดยไม่ต้องกังวลกับกิจกรรมของลูกค้ารายอื่นและไม่จำเป็นต้องล็อคหรือทำธุรกรรม (ที่มา) และแม้กระทั่งไปไกลถึงจะบอกว่า: การใช้LAST_INSERT_ID()และAUTO_INCREMENTคอลัมน์พร้อมกันจากไคลเอนต์หลายคนถูกต้องสมบูรณ์ (ที่มา) มีความเสี่ยงหรือสถานการณ์ที่ทราบที่อาจทำให้LAST_INSERT_ID()ไม่คืนค่าที่ถูกต้องหรือไม่? ฉันใช้ MySQL 5.5 บน CentOS 5.5 x64 และ Fedora 16 x64 และเอ็นจิ้น InnoDB

1
คุณสร้างมุมมองด้วย SNAPSHOT_MATERIALIZATION ใน SQL Server 2017 ได้อย่างไร
SQL Server 2017 มีขั้นตอนการจัดเก็บใหม่สองสามขั้นตอน: sp_refresh_single_snapshot_view - พารามิเตอร์การป้อนข้อมูลสำหรับ @view_name nvarchar (261), @rgCode int sp_refresh_snapshot_views - พารามิเตอร์ขาเข้าสำหรับ @rgCode int และรายการใหม่ใน sys.messages: 10149 - ดัชนีที่มี SNAPSHOT_MATERIALIZATION ไม่สามารถสร้างได้ในมุมมอง '%. * ls' เนื่องจากคำจำกัดความการดูประกอบด้วยตารางที่ปรับให้เหมาะสมกับหน่วยความจำ 10642 - SNAPSHOT_MATERIALIZATION ไม่สามารถตั้งค่าสำหรับดัชนี '%. * ls' บน '%. * ls' เนื่องจากใช้กับดัชนีในมุมมองเท่านั้น 10643 - SNAPSHOT_MATERIALIZATION ไม่สามารถตั้งค่าสำหรับ '%. * ls' บน '%. * …

2
ทำความเข้าใจกับ“ การสแกนบิตแมปฮีป” และ“ การสแกนดัชนีบิตแมป”
ฉันจะพยายามอธิบายความเข้าใจที่คลาดเคลื่อนของฉันตามตัวอย่างต่อไปนี้ ผมไม่เข้าใจปัจจัยพื้นฐานBitmap Heap Scan Nodeของ พิจารณาแบบสอบถามSELECT customerid, username FROM customers WHERE customerid < 1000 AND username <'user100';ซึ่งเป็นแผนนี้: Bitmap Heap Scan on customers (cost=25.76..61.62 rows=10 width=13) (actual time=0.077..0.077 rows=2 loops=1) Recheck Cond: (((username)::text < 'user100'::text) AND (customerid < 1000)) -> BitmapAnd (cost=25.76..25.76 rows=10 width=0) (actual time=0.073..0.073 rows=0 loops=1) -> Bitmap Index …
36 postgresql  index 

1
จะดูการตั้งค่าปัจจุบันของ Autovacuum ใน Postgres ได้อย่างไร?
ฉันพบตัวอย่างหนึ่งล้านตัวอย่างของวิธีตั้งค่าการตั้งค่าของ Autovacuum แต่ดูเหมือนจะไม่พบวิธีแสดงรายการการกำหนดค่าปัจจุบัน Postgres 9.1 เป็นรุ่นที่ฉันสนใจมากที่สุด

5
เมื่อแบบสอบถาม SQL ที่เร็วกว่าเดิมเริ่มทำงานช้าฉันจะค้นหาแหล่งที่มาของปัญหาได้ที่ไหน
พื้นหลัง ฉันมีแบบสอบถามที่ใช้กับ SQL Server 2008 R2 ที่รวมและ / หรือซ้ายเข้าร่วมกับ "ตาราง" ที่แตกต่างกันประมาณ 12 รายการ ฐานข้อมูลมีขนาดค่อนข้างใหญ่โดยมีตารางมากกว่า 50 ล้านแถวและประมาณ 300 ตารางที่แตกต่างกัน สำหรับ บริษัท ขนาดใหญ่ที่มีคลังสินค้า 10 แห่งทั่วประเทศ คลังสินค้าทั้งหมดอ่านและเขียนไปยังฐานข้อมูล ดังนั้นมันจึงค่อนข้างใหญ่และค่อนข้างยุ่ง ข้อความค้นหาที่ฉันพบมีลักษณะดังนี้: select t1.something, t2.something, etc. from Table1 t1 inner join Table2 t2 on t1.id = t2.t1id left outer join (select * from table 3) t3 …

1
MySQL: ทำไมจึงมีรายการ "ทดสอบ" ใน mysql.db
เมื่อเร็ว ๆ นี้ผมโพสต์คำตอบสำหรับคำถามเกี่ยวกับ mysql.db จากนั้นฉันต้องคิดว่าฉันควรถามคำถามนี้กับทุกคน: ฉันสังเกตเห็นมานานหลายปีแล้วว่าเมื่อติดตั้ง MySQL 5.0+ mysql.dbจะมีสองรายการที่อนุญาตให้เข้าถึงฐานข้อมูลทดสอบโดยผู้ใช้ที่ไม่ระบุชื่อ คุณสามารถดูได้โดยเรียกใช้แบบสอบถามนี้: mysql> select * from mysql.db where SUBSTR(db,1,4) = 'test'\G *************************** 1. row *************************** Host: % Db: test User: Select_priv: Y Insert_priv: Y Update_priv: Y Delete_priv: Y Create_priv: Y Drop_priv: Y Grant_priv: N References_priv: Y Index_priv: Y Alter_priv: Y Create_tmp_table_priv: Y …
36 mysql  security 

2
เหตุใดลำดับ Denali จึงควรทำงานได้ดีกว่าคอลัมน์ข้อมูลประจำตัว
ในคำตอบของเขาที่จะดีกว่า: คอลัมน์ข้อมูลประจำตัวหรือสร้างค่ารหัสที่ไม่ซ้ำกัน? mrdenny พูดว่า: เมื่อ SQL Denali ออกมามันจะสนับสนุนลำดับซึ่งจะมีประสิทธิภาพมากกว่าเอกลักษณ์ แต่คุณไม่สามารถสร้างสิ่งที่มีประสิทธิภาพมากขึ้นด้วยตัวคุณเอง ผมไม่แน่ใจ. เมื่อทราบลำดับของ Oracle ฉันต้องสร้างทริกเกอร์สำหรับแทรกใส่แค็ปซูลแต่ละอันไว้ในการเรียกโพรซีเดอร์ที่เก็บไว้หรือภาวนาว่าฉันไม่ลืมที่จะใช้ลำดับเมื่อฉันแทรกโฆษณาแบบเฉพาะกิจ ฉันสงสัยว่าข้อดีของลำดับนั้นชัดเจนมาก

2
มีการใช้คำสั่งในลำดับที่เขียนหรือไม่
ฉันพยายามเพิ่มประสิทธิภาพการสืบค้นซึ่งมีลักษณะเป็นตารางขนาดใหญ่ (37 ล้านแถว) และมีคำถามเกี่ยวกับลำดับการดำเนินการในแบบสอบถาม select 1 from workdays day where day.date_day >= '2014-10-01' and day.date_day <= '2015-09-30' and day.offer_id in ( select offer.offer_day from offer inner join province on offer.id_province = province.id_province inner join center cr on cr.id_cr = province.id_cr where upper(offer.code_status) <> 'A' and province.id_region in ('10' ,'15' ,'21' …

5
เหตุใดข้อ จำกัด UNIQUE จึงอนุญาตให้ NULL เพียงหนึ่งอันเท่านั้น
ในทางเทคนิค NULL = NULL เป็นเท็จโดยตรรกะนั้น NULL จะเท่ากับ NULL ใด ๆ และ NULL ทั้งหมดนั้นแตกต่างกัน นี่ไม่ควรบอกเป็นนัยเลยว่า NULL ทั้งหมดนั้นไม่เหมือนใครและดัชนีที่ไม่ซ้ำกันควรอนุญาตให้มี NULL จำนวนเท่าใด?

5
วิธีคัดลอกล้านแถวจากตารางหนึ่งไปยังอีกตารางใน Postgresql ได้อย่างมีประสิทธิภาพ
ฉันมีตารางฐานข้อมูลสองตาราง หนึ่งมีหลายร้อยล้านบันทึก historyให้เรียกว่าหนึ่ง อีกอันหนึ่งคำนวณจากรายวันและฉันต้องการคัดลอกบันทึกทั้งหมดลงในรายการhistoryหนึ่ง สิ่งที่ฉันทำคือเรียกใช้: INSERT INTO history SELECT * FROM daily และมันก็มีเล่ห์เหลี่ยมอยู่พักหนึ่ง แต่มันก็เริ่มช้าลงเรื่อย ๆ ตามจำนวนเรคคอร์ดที่เพิ่มขึ้นเรื่อย ๆ ตอนนี้ฉันมีระเบียนประมาณ 2 ล้านรายการที่ต้องคัดลอกจากdailyไปยังhistoryในการดำเนินการเดียวและใช้เวลานานกว่าจะเสร็จสมบูรณ์ มีวิธีอื่นที่มีประสิทธิภาพมากกว่าในการคัดลอกข้อมูลจากตารางหนึ่งไปอีกตารางหนึ่งหรือไม่?
36 postgresql 

5
เหตุใด SQL Server จึงใช้หน่วยความจำเซิร์ฟเวอร์มากขึ้น
SQL Server บริโภค 87.5% ของ RAM เซิร์ฟเวอร์ของฉัน เมื่อเร็ว ๆ นี้ทำให้เกิดปัญหาคอขวดของประสิทธิภาพเช่นความช้า ฉันค้นคว้าปัญหานี้แล้ว ทางออกหนึ่งที่พบได้ทั่วไปบนอินเทอร์เน็ตคือการกำหนดขีด จำกัด สูงสุดของ SQL Server สิ่งนี้ทำและได้รับการปรับปรุงมาก ฉันต้องการทราบว่าทำไมหากไม่ได้ตั้งค่าหน่วยความจำสูงสุดว่าทำไม SQL Server ยังคงใช้ทรัพยากรต่อไป

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