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

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

2
TOP (และทำไม) ส่งผลกระทบต่อแผนการดำเนินการอย่างไร
สำหรับข้อความค้นหาที่ซับซ้อนปานกลางที่ฉันพยายามปรับให้เหมาะสมฉันสังเกตว่าการลบTOP nคำสั่งเปลี่ยนแผนการดำเนินการ ฉันจะเดาว่าเมื่อเคียวรีมีเอ็นจินTOP nฐานข้อมูลจะรันเคียวรีโดยไม่สนใจTOPคำสั่งและจากนั้นในตอนท้ายก็ลดขนาดของผลลัพธ์ที่กำหนดไว้เป็นจำนวนแถวnที่ถูกร้องขอ แผนการดำเนินการกราฟิกดูเหมือนว่าจะระบุว่าเป็นกรณีนี้ - TOPเป็นขั้นตอน "สุดท้าย" แต่ดูเหมือนว่าจะเกิดขึ้นมากขึ้น คำถามของฉันคือประโยค TOP และ N มีผลอย่างไรต่อแผนการดำเนินการของแบบสอบถาม นี่เป็นเวอร์ชั่นที่เรียบง่ายของสิ่งที่เกิดขึ้นในกรณีของฉัน: แบบสอบถามกำลังจับคู่แถวจากสองตาราง A และ B โดยไม่ต้องTOPเป็นไปตามข้อเพิ่มประสิทธิภาพประเมินจะมี 19k แถวจากตารางและ 46K แถวจากตาราง B. จำนวนที่เกิดขึ้นจริงของแถวกลับเป็น 16k สำหรับ A และ 13k สำหรับการแข่งขันบีกัญชาจะใช้ในการเข้าร่วมทั้งสองชุดผลลัพธ์ รวม 69 แถว (จากนั้นจะใช้การเรียงลำดับ) แบบสอบถามนี้เกิดขึ้นอย่างรวดเร็วมาก เมื่อฉันเพิ่มTOP 1001เครื่องมือเพิ่มประสิทธิภาพไม่ได้ใช้แฮชจับคู่; แต่ก่อนจะเรียงลำดับผลลัพธ์จากตาราง A (ประมาณเดียวกัน / เป็นจริงของ 19k / 16k) และทำการวนซ้ำซ้อนกับตาราง B จำนวนแถวของตาราง …

2
ตรวจสอบการมีอยู่ของ EXISTS ดีกว่า COUNT! …ไม่
ฉันได้อ่านบ่อยเมื่อมีการตรวจสอบการดำรงอยู่ของแถวควรเสมอทำได้ด้วย EXISTS แทนกับการนับ แต่ในหลายสถานการณ์ที่ผ่านมาฉันได้วัดการปรับปรุงประสิทธิภาพเมื่อใช้การนับ รูปแบบเป็นไปดังนี้: LEFT JOIN ( SELECT someID , COUNT(*) FROM someTable GROUP BY someID ) AS Alias ON ( Alias.someID = mainTable.ID ) ฉันไม่คุ้นเคยกับวิธีการที่จะบอกว่าเกิดอะไรขึ้น "ภายใน" SQL Server ดังนั้นฉันจึงสงสัยว่ามีข้อผิดพลาดที่ไม่มีผู้แปลที่มี EXISTS ที่ให้ความรู้สึกที่สมบูรณ์แบบกับการวัดที่ฉันทำ คุณมีคำอธิบายเกี่ยวกับปรากฏการณ์นั้นบ้างไหม? แก้ไข: นี่คือสคริปต์เต็มรูปแบบที่คุณสามารถเรียกใช้: SET NOCOUNT ON SET STATISTICS IO OFF DECLARE @tmp1 TABLE ( ID INT UNIQUE …

5
ปัญหาการล็อคด้วย DELETE / INSERT พร้อมกันใน PostgreSQL
มันค่อนข้างง่าย แต่ฉันก็งงกับสิ่งที่ PG ทำ (v9.0) เราเริ่มต้นด้วยตารางง่ายๆ CREATE TABLE test (id INT PRIMARY KEY); และไม่กี่แถว: INSERT INTO TEST VALUES (1); INSERT INTO TEST VALUES (2); การใช้เครื่องมือสืบค้น JDBC ที่ฉันโปรดปราน (ExecuteQuery) ฉันเชื่อมต่อหน้าต่างสองเซสชันเข้ากับฐานข้อมูลที่ตารางนี้ใช้งานอยู่ ทั้งคู่เป็นธุรกรรม (เช่น auto-commit = false) ลองเรียกพวกมันว่า S1 และ S2 รหัสเดียวกันสำหรับแต่ละ: 1:DELETE FROM test WHERE id=1; 2:INSERT INTO test VALUES (1); 3:COMMIT; …

4
ฉันจะเปลี่ยน DEFINER ของ VIEW ใน Mysql ได้อย่างไร
เมื่อฉันเรียกใช้ mysqldump ฉันได้รับข้อผิดพลาด: mysqldump: Got error: 1449: The user specified as a definer ('root'@'foobar') does not exist when using LOCK TABLES เรื่องนี้สมเหตุสมผลเพราะfoobarเป็นเครื่องจักรที่ไม่มีอยู่จริง ฉันจะเปลี่ยนนิยามของตารางทั้งหมดเป็น 'root' @ 'localhost' ได้อย่างไร

4
ลำดับของคอลัมน์ในคำจำกัดความของตารางมีความสำคัญหรือไม่
เมื่อกำหนดตารางการเรียงลำดับคอลัมน์ในกลุ่มเชิงตรรกะและกลุ่มจะเป็นประโยชน์ การเรียงลำดับแบบลอจิคัลของคอลัมน์ในตารางบ่งบอกถึงความหมายของผู้พัฒนาและเป็นองค์ประกอบของสไตล์ที่ดี นั่นชัดเจน อย่างไรก็ตามสิ่งที่ไม่ชัดเจนคือว่าการเรียงลำดับเชิงตรรกะของคอลัมน์ในตารางมีผลกระทบต่อการจัดเรียงทางกายภาพที่ชั้นการจัดเก็บหรือไม่หรือมีผลกระทบอื่น ๆ ที่อาจสนใจ นอกเหนือจากผลกระทบต่อสไตล์การเรียงลำดับของคอลัมน์มีความสำคัญหรือไม่ มีคำถามเกี่ยวกับ Stack Overflowเกี่ยวกับเรื่องนี้ แต่ไม่มีคำตอบที่เชื่อถือได้

4
ทำไม MySQL ไม่มีแฮชดัชนีใน MyISAM หรือ InnoDB
ฉันมีแอพพลิเคชั่นที่จะเลือกใช้ความเท่าเทียมกันเท่านั้นและฉันคิดว่าฉันควรใช้ดัชนีแฮชเหนือดัชนี btree MyISAM หรือ InnoDB ไม่รองรับดัชนีแฮชของฉัน เกิดอะไรขึ้นกับสิ่งนั้น
35 mysql  index  innodb  myisam 

8
อะไรคือความแตกต่างระหว่าง INNER JOIN และ OUTER JOIN
ฉันยังใหม่กับ SQL และต้องการทราบว่าอะไรคือความแตกต่างระหว่างสองJOINประเภทนี้? SELECT * FROM user u INNER JOIN telephone t ON t.user_id = u.id SELECT * FROM user u LEFT OUTER JOIN telephone t ON t.user_id = u.id เมื่อใดที่ฉันควรใช้รายการใดรายการหนึ่ง
35 join 

6
ปิดใช้งานการบันทึก MySQL แบบไบนารีด้วยตัวแปร log_bin
ไฟล์เริ่มต้น MySQL config /etc/mysql/my.cnf ที่ติดตั้งโดยแพ็คเกจ debian บางตัวที่ใช้ APT มักจะตั้งค่าตัวแปร log_bin ดังนั้น binlog จึงเปิดใช้งาน: log_bin = /var/log/mysql/mysql-bin.log เมื่อฉันต้องการปิดการใช้งานการบันทึกแบบไบนารีในการติดตั้งเช่นนั้นให้ใส่เครื่องหมายบรรทัดใน my.cnf แต่แน่นอนว่ามีวิธีการปิดการใช้งานการบันทึกแบบไบนารีโดยการตั้งค่าอย่างละเอียด log_bin เป็น OFF ในลักษณะเดเบียนฉันหมายถึง ไฟล์รวมเช่น /etc/mysql/conf.d/myCustomFile.cnf ดังนั้น my.cnf เริ่มต้นจะไม่เปลี่ยนแปลงและสามารถอัปเดตได้ง่ายโดย apt หากจำเป็น ฉันลอง "log_bin = 0", "log_bin = ปิด" หรือ "log_bin =" แต่ไม่มีใครทำงาน ...
35 mysql  logs  binlog  debian 

3
ตรวจสอบเครื่องมือจัดเก็บข้อมูลจากเปลือก
ฉันกำลังอัปเกรดเป็น 3.0 และพบปัญหาบางอย่างกับการอัปเกรด โดยเฉพาะฉันได้รับข้อผิดพลาดเมื่อพยายามเริ่มการทำงานmongodผ่านsshมันพยายามใช้ค่าเริ่มต้นdbpathแทนที่จะเป็นค่าที่ฉันระบุในไฟล์กำหนดค่า YAML ใหม่ของฉัน ฉันไปข้างหน้าและรีบู๊ตเครื่องและตอนนี้mongodก็เปิดขึ้นและทำงานอีกครั้ง ฉันรู้สึกหวาดระแวงตอนนี้และต้องการทราบว่ามีวิธีการตรวจสอบให้แน่ใจว่าเครื่องมือจัดเก็บข้อมูลwiredtigerมาจากเปลือกหรือไม่

1
การใช้คำสั่ง build ใน JOIN สามารถแนะนำอุปสรรคการเพิ่มประสิทธิภาพได้ในบางกรณี?
ฉันได้รับความสนใจว่าการUSINGสร้าง (แทนON) ในส่วนFROMคำSELECTสั่งอาจทำให้เกิดปัญหาและอุปสรรคในการเพิ่มประสิทธิภาพในบางกรณี ฉันหมายถึงคำสำคัญนี้: เลือก * จาก เข้าร่วมขโดยใช้ (a_id) ในกรณีที่ซับซ้อนมากขึ้น บริบท: ความคิดเห็นสำหรับคำถามนี้ ฉันใช้สิ่งนี้มากและไม่เคยสังเกตเห็นอะไรเลย ฉันสนใจกรณีทดสอบที่แสดงให้เห็นถึงผลกระทบหรือลิงก์ใด ๆไปยังข้อมูลเพิ่มเติม ความพยายามในการค้นหาของฉันว่างเปล่า คำตอบที่สมบูรณ์แบบจะเป็นกรณีทดสอบเพื่อแสดงUSING (a_id)ด้วยประสิทธิภาพที่ต่ำกว่าเมื่อเปรียบเทียบกับข้อเข้าร่วมทางเลือกON a.a_id = b.a_id- ถ้านั่นสามารถเกิดขึ้นได้จริง

4
MySQL ตั้งค่าเวลา UTC เป็นเวลาเริ่มต้น
ฉันจะตั้งค่าคอลัมน์เวลาประทับที่ค่าเริ่มต้นคือเวลา UTC ปัจจุบันได้อย่างไร MySQL ใช้UTC_TIMESTAMP()ฟังก์ชั่นสำหรับการประทับเวลา UTC: mysql> SELECT UTC_TIMESTAMP(); +---------------------+ | UTC_TIMESTAMP() | +---------------------+ | 2012-07-01 11:36:35 | +---------------------+ 1 row in set (0.00 sec) ดังนั้นฉันได้ลอง: CREATE TABLE `blah` ( `creation_time` TIMESTAMP DEFAULT UTC_TIMESTAMP, ... และรูปแบบอื่น ๆ เช่นUTC_TIMESTAMP()แต่ไม่ประสบความสำเร็จ

2
เลือกตำแหน่งของคอลัมน์สองชุด
นี่อาจเป็นคำถามงี่เง่าและความสงสัยของฉันคือฉันไม่สามารถทำได้ แต่มีโครงสร้างใน SQL ที่จะให้ฉันทำสิ่งต่อไปนี้: SELECT whatever WHERE col1,col2 IN ((val1, val2), (val1, val2), ...) ฉันต้องการเลือกข้อมูลที่มีสองคอลัมน์อยู่ในชุดของคู่ ฉันต้องการหลีกเลี่ยงการใช้แบบสอบถามย่อยถ้าเป็นไปได้
35 mysql  where 

1
ฉันควรใช้ดัชนีฟิลด์เดียวหลายดัชนีแทนที่จะเป็นดัชนีหลายคอลัมน์ที่เฉพาะเจาะจงหรือไม่
คำถามนี้เกี่ยวกับประสิทธิผลของเทคนิคการทำดัชนี SQL Server ฉันคิดว่าเป็นที่รู้จักกันในชื่อ "จุดตัดดัชนี" ฉันกำลังทำงานกับแอปพลิเคชัน SQL Server (2008) ที่มีอยู่ซึ่งมีปัญหาเรื่องประสิทธิภาพและความเสถียรหลายประการ นักพัฒนาทำสิ่งแปลก ๆ ด้วยการจัดทำดัชนี ฉันไม่สามารถรับข้อสรุปมาตรฐานเกี่ยวกับปัญหาเหล่านี้ได้ฉันไม่สามารถหาเอกสารที่ดีเกี่ยวกับ internets ได้ มีคอลัมน์ที่ค้นหาได้จำนวนมากในตาราง นักพัฒนาสร้างดัชนีคอลัมน์เดียวในแต่ละคอลัมน์ที่ค้นหาได้ ทฤษฎีคือ SQL Server จะสามารถรวม (ตัดกัน) แต่ละดัชนีเหล่านี้เพื่อเข้าถึงตารางอย่างมีประสิทธิภาพในสถานการณ์ส่วนใหญ่ นี่คือตัวอย่างที่ง่าย (ตารางจริงมีเขตข้อมูลเพิ่มเติม): CREATE TABLE [dbo].[FatTable]( [id] [bigint] IDENTITY(1,1) NOT NULL, [col1] [nchar](12) NOT NULL, [col2] [int] NOT NULL, [col3] [varchar](2000) NOT NULL, ... CREATE NONCLUSTERED INDEX …

4
ฉันควรเพิ่มขีดจำกัดความยาวตามอำเภอใจในคอลัมน์ VARCHAR หรือไม่
ตามเอกสารของ PostgreSQLไม่มีความแตกต่างระหว่างประสิทธิภาพVARCHAR, และVARCHAR(n)TEXT ฉันควรเพิ่มขีดจำกัดความยาวตามอำเภอใจในคอลัมน์ชื่อหรือที่อยู่หรือไม่? แก้ไข:ไม่ใช่รายการที่: การค้นหาดัชนีจะเร็วขึ้นอย่างเห็นได้ชัดด้วย char vs varchar หรือไม่เมื่อค่าทั้งหมดเป็น 36 ตัวอักษร ฉันรู้ว่าCHARประเภทนี้เป็นของที่ระลึกในอดีตและฉันไม่เพียง แต่สนใจในการแสดงเท่านั้น

2
เรียงตามคอลัมน์ควรมีดัชนีหรือไม่
ฉันได้เพิ่มดัชนีในตารางซึ่งใช้สำหรับผลการค้นหา ฉันกำลังแสดงผลลัพธ์ตามลำดับ ASC หรือ DESC ดังนั้นคอลัมน์นั้นควรมีดัชนีหรือไม่? ฉันมีอีก 2 ดัชนีในตารางนั้น ประสิทธิภาพจะมีผลต่อการสร้างดัชนีหรือไม่สร้างดัชนีในคอลัมน์นั้น

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