คำถามติดแท็ก index

โครงสร้างฐานข้อมูลที่สามารถปรับปรุงความเร็วของการสืบค้นที่ราคาของพื้นที่ดิสก์และการแทรก / การปรับปรุงที่ช้ากว่า มันเก็บสำเนาของคอลัมน์อย่างน้อยหนึ่งคอลัมน์ที่เรียงลำดับ แต่โครงสร้างข้อมูลแตกต่างกันเพื่อให้เข้าถึงได้เร็วขึ้น

6
เมื่อใดที่ฉันควรใช้ข้อ จำกัด ที่ไม่ซ้ำกันแทนที่จะเป็นดัชนีที่ไม่ซ้ำกัน
เมื่อฉันต้องการให้คอลัมน์มีค่าที่แตกต่างฉันสามารถใช้ข้อ จำกัด ได้ create table t1( id int primary key, code varchar(10) unique NULL ); go หรือฉันสามารถใช้ดัชนีเฉพาะ create table t2( id int primary key, code varchar(10) NULL ); go create unique index I_t2 on t2(code); คอลัมน์ที่มีข้อ จำกัด เฉพาะดูเหมือนจะเป็นตัวเลือกที่ดีสำหรับดัชนีเฉพาะ มีเหตุผลใดบ้างที่ทราบว่าใช้ข้อ จำกัด ที่เป็นเอกลักษณ์และไม่ใช้ดัชนีที่ไม่ซ้ำกันแทน

6
วิธีตรวจสอบว่าจำเป็นต้องใช้ดัชนีหรือไม่
ฉันใช้เครื่องมือดัชนีอัตโนมัติบนฐานข้อมูล MS SQL ของเรา (ฉันแก้ไขสคริปต์ที่มาจาก Microsoft ซึ่งดูที่ตารางสถิติดัชนี - ดัชนีอัตโนมัติแบบดัชนี ) จากสถิติตอนนี้ฉันมีรายการคำแนะนำสำหรับดัชนีที่ต้องการสร้าง แก้ไข: ดัชนีที่อธิบายข้างต้นนำข้อมูลจาก DMV ที่บอกให้คุณทราบว่าโปรแกรมฐานข้อมูลจะใช้อะไรสำหรับดัชนีหากมีอยู่และสคริปต์ใช้คำแนะนำ Top x (ตามการค้นหาผู้ใช้ส่งผลกระทบ ฯลฯ ) และวางลงในตาราง (แก้ไขด้านบนบางส่วนมาจากคำตอบของ Larry Coleman ด้านล่างเพื่อชี้แจงสิ่งที่สคริปต์กำลังทำอยู่) เนื่องจากฉันยังใหม่กับผู้ดูแลฐานข้อมูลและมีการค้นหาอย่างรวดเร็วทั่วเน็ตฉันลังเลที่จะกระโดดและเพิ่มดัชนีที่แนะนำอย่างสุ่มสี่สุ่มห้า อย่างไรก็ตามไม่มีประสบการณ์ในสาขานี้ฉันกำลังมองหาคำแนะนำเกี่ยวกับวิธีตรวจสอบว่าคำแนะนำนั้นจำเป็นหรือไม่ ฉันจำเป็นต้องเรียกใช้ SQL Profiler หรือไม่ควรตรวจสอบรหัสที่สืบค้นตารางหรือไม่ และคุณมีคำแนะนำอื่น ๆ อีกไหม?

4
การเพิ่มประสิทธิภาพการสืบค้นในช่วงเวลาที่ประทับ (สองคอลัมน์)
ฉันใช้ PostgreSQL 9.1 บน Ubuntu 12.04 ฉันต้องเลือกระเบียนภายในช่วงเวลาหนึ่ง: ตารางของฉันtime_limitsมีสองtimestampฟิลด์และหนึ่งintegerคุณสมบัติ มีคอลัมน์เพิ่มเติมในตารางจริงของฉันที่ไม่เกี่ยวข้องกับแบบสอบถามนี้ create table ( start_date_time timestamp, end_date_time timestamp, id_phi integer, primary key(start_date_time, end_date_time,id_phi); ตารางนี้มีเร็กคอร์ด 2M โดยประมาณ ข้อความค้นหาต่อไปนี้ใช้เวลามหาศาล select * from time_limits as t where t.id_phi=0 and t.start_date_time <= timestamp'2010-08-08 00:00:00' and t.end_date_time >= timestamp'2010-08-08 00:05:00'; ดังนั้นฉันจึงพยายามเพิ่มดัชนีอื่น - ค่าผกผันของ PK: create index idx_inversed …

8
การจับคู่รูปแบบด้วย LIKE, SIMILAR TO หรือนิพจน์ปกติใน PostgreSQL
ฉันต้องเขียนคำถามง่ายๆที่ฉันไปหาชื่อของคนที่เริ่มต้นด้วย B หรือ D: SELECT s.name FROM spelers s WHERE s.name LIKE 'B%' OR s.name LIKE 'D%' ORDER BY 1 ฉันสงสัยว่าถ้ามีวิธีที่จะเขียนสิ่งนี้เพื่อให้มีประสิทธิภาพมากขึ้น ดังนั้นฉันสามารถหลีกเลี่ยงorและ / หรือlike?

3
ดัชนีคอมโพสิตยังดีสำหรับการค้นหาในเขตข้อมูลแรกหรือไม่
สมมติว่าผมมีตารางที่มีสาขาและA Bฉันจะทำให้คำสั่งปกติA+ ดังนั้นฉันสร้างดัชนีคอมโพสิตในB (A,B)คำสั่งในการค้นหาAจะได้รับการปรับให้เหมาะสมอย่างเต็มที่โดยดัชนีคอมโพสิตหรือไม่ นอกจากนี้ผมสร้างดัชนีในAแต่ Postgres Aยังคงใช้ดัชนีคอมโพสิตสำหรับการค้นหาเท่านั้น หากคำตอบก่อนหน้าเป็นบวกฉันคิดว่ามันไม่สำคัญ แต่ทำไมมันถึงเลือกดัชนีคอมโพสิตตามค่าเริ่มต้นหากมีAดัชนีเดียว

5
การทำงานของดัชนีใน PostgreSQL
ฉันมีคำถามสองสามข้อเกี่ยวกับการทำงานของดัชนีใน PostgreSQL ฉันมีFriendsตารางที่มีดัชนีต่อไปนี้: Friends ( user_id1 ,user_id2) user_id1และuser_id2เป็นกุญแจต่างประเทศเข้าสู่userตาราง สิ่งเหล่านี้เทียบเท่ากันหรือไม่ ถ้าไม่เช่นนั้นทำไม Index(user_id1,user_id2) and Index(user_id2,user_id1) ถ้าฉันสร้างคีย์หลัก (user_id1, user_id2) มันจะสร้างดัชนีให้โดยอัตโนมัติหรือไม่ หากดัชนีในคำถามแรกไม่เท่ากันดัชนีใดจะถูกสร้างขึ้นบนคำสั่งคีย์หลักด้านบน

4
วิธีการใช้ psql โดยไม่แจ้งรหัสผ่าน?
ฉันเขียนสคริปต์เพื่อREINDEXจัดทำดัชนีในฐานข้อมูล นี่คือหนึ่งในนั้น: echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE} psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;" if [[ ${?} -eq 0 ]]; then echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE} else echo "reindex for unq_vbvdata_vehicle failed" >> …
70 postgresql  index  psql 

4
ลำดับเริ่มต้นของการบันทึกสำหรับคำสั่ง SELECT ใน MySQL คืออะไร?
สมมติว่าคุณมีตารางและข้อมูลต่อไปนี้: create table t ( k int, v int, index k(k) ) engine=memory; insert into t (k, v) values (10, 1), (10, 2), (10, 3); เมื่อออกselect * from t where k = 10โดยไม่มีorder byส่วนคำสั่ง MySQL จะเรียงลำดับระเบียนตามค่าเริ่มต้นอย่างไร

4
ดัชนีค้นหา vs สแกนดัชนี
ดูที่แผนการดำเนินการของคิวรีที่รันช้าและฉันสังเกตว่าบางโหนดเป็นดรรชนีและบางอันก็สแกนดรรชนี ความแตกต่างระหว่างกับการค้นหาดัชนีและการสแกนดัชนีคืออะไร? แบบไหนดีกว่ากัน? SQL จะเลือกอย่างใดอย่างหนึ่งได้อย่างไร ฉันรู้ว่านี่คือคำถาม 3 ข้อ แต่ฉันคิดว่าการตอบคำถามแรกจะอธิบายคำถามอื่น ๆ

4
MySQL: สร้างดัชนีหากไม่มีอยู่
มีวิธีสร้างดัชนีใน MySQL หรือไม่หากไม่มีอยู่? MySQL ไม่รองรับรูปแบบที่ชัดเจน: CREATE INDEX IF NOT EXISTS index_name ON table(column) ERROR 1064 (42000): You have an error in your SQL syntax;... รุ่น MySQL ( mysql -V) คือ 5.1.48 แต่ฉันคิดว่า MySQL ขาดCREATE INDEX IF NOT EXISTความสามารถในทุกรุ่น เป็นวิธีที่ถูกต้องในการสร้างดัชนีเฉพาะถ้ามันไม่ได้อยู่ใน MySQL คืออะไร?

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

2
ทำสถิติการอัพเดตดัชนีใหม่หรือไม่?
ฉันได้ทำหลักสูตร MS10775A เมื่อสัปดาห์ที่แล้วและมีคำถามหนึ่งข้อที่ผู้ฝึกสอนไม่สามารถตอบได้อย่างน่าเชื่อถือคือ: ดัชนีใหม่อัปเดตสถิติหรือไม่ เราพบว่าการสนทนาออนไลน์โต้เถียงทั้งที่เป็นอยู่และไม่เป็นเช่นนั้น

2
เป็นไปได้ INDEX บนเขตข้อมูล VARCHAR ใน MySql
ฉันทำงานในฐานข้อมูล MySqlโดยมีตารางดังนี้: +--------------+ | table_name | +--------------+ | myField | +--------------+ ... และฉันต้องการสอบถามจำนวนมากเช่นนี้(มี 5-10 สตริงในรายการ) : SELECT myField FROM table_name WHERE myField IN ('something', 'other stuff', 'some other a bit longer'...) จะมีแถวที่ไม่ซ้ำประมาณ 24.000.000 แถว 1)ฉันควรใช้ a FULLTEXTหรือและที่INDEXสำคัญสำหรับของฉันVARCHAR(150)? 2)ถ้าฉันเพิ่มตัวอักษรจาก 150 เป็น 220 หรือ 250 ... มันจะสร้างความแตกต่างได้หรือไม่? (มีวิธีการคำนวณหรือไม่?) 3)ตามที่ฉันพูดพวกเขาจะไม่ซ้ำกันดังนั้นสนามของฉันควรเป็นคีย์หลัก การเพิ่มคีย์หลักในฟิลด์ซึ่งเป็น VARCHAR INDEX …

3
เพราะเหตุใดฐานข้อมูลของฉันยังคงกระจัดกระจายหลังจากฉันสร้างและทำดัชนีใหม่ทุกอย่างแล้ว
ฉันมีฐานข้อมูลที่ฉันพยายามจัดระเบียบตารางทั้งหมดในครั้งเดียวโดยใช้ T-SQL นี้: SELECT 'ALTER INDEX all ON ' + name + ' REORGANIZE;' + CHAR(10) + 'ALTER INDEX all ON ' + name + ' REBUILD;' FROM sys.tables จากนั้นคัดลอกและวางผลลัพธ์ไปยังหน้าต่างแบบสอบถามใหม่และเรียกใช้สิ่งนั้น ฉันไม่มีข้อผิดพลาด แต่ฉันยังมีการแยกส่วน ฉันพยายามเรียกใช้ทั้งสองคำสั่งแยกกันด้วยและยังมีการแยกส่วน หมายเหตุ:ฉันทราบว่าREORGANIZEไม่จำเป็นโดย Aaron และฉันรู้ว่าฉันสามารถใช้ไดนามิก sql เพื่อทำสิ่งนี้โดยอัตโนมัติ ฉันรันสิ่งนี้เพื่อพิจารณาว่าฉันยังมีการแยกส่วน: SELECT * FROM sys.dm_db_index_physical_stats (DB_ID(), NULL, NULL , NULL, NULL) WHERE …

4
กฎที่แข็งและเร็วสำหรับการรวมคอลัมน์ในดัชนี
มีกฎใด ๆ ที่ยากและรวดเร็วในการตัดสินใจว่าควรจะใส่คอลัมน์ใดและเรียงตามลำดับในรวมในดัชนีที่ไม่ทำคลัสเตอร์ ฉันเพิ่งอ่านบทความนี้https://stackoverflow.com/questions/1307990/why-use-the-include-clause-when-creating-an-index และฉันพบว่าสำหรับแบบสอบถามต่อไปนี้: SELECT EmployeeID, DepartmentID, LastName FROM Employee WHERE DepartmentID = 5 โปสเตอร์แนะนำให้สร้างดัชนีแบบนี้: CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee(EmployeeID, DepartmentID) INCLUDE (Lastname) ที่นี่คำถามของฉันมาทำไมเราไม่สามารถสร้างดัชนีเช่นนี้ CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, DepartmentID, LastName) หรือ CREATE NONCLUSTERED INDEX NC_EmpDep ON Employee( EmployeeID, LastName) INCLUDE (DepartmentID) และสิ่งใดที่ทำให้ผู้โพสต์ตัดสินใจที่จะเก็บคอลัมน์นามสกุลไว้ด้วย ทำไมไม่คอลัมน์อื่น ๆ และวิธีการตัดสินใจในลำดับที่เราควรเก็บคอลัมน์ที่มี?

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