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

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

2
โพสต์การค้นหาข้อความแบบเต็มด้วยหลายคอลัมน์ทำไมข้อตกลงในดัชนีและไม่อยู่ในรันไทม์
ฉันเจอการค้นหาข้อความแบบเต็มใน postgres ในไม่กี่วันที่ผ่านมาและฉันสับสนเล็กน้อยเกี่ยวกับการจัดทำดัชนีเมื่อค้นหาในหลายคอลัมน์ เอกสาร postgres พูดคุยเกี่ยวกับการสร้างts_vectorดัชนีในคอลัมน์ที่ต่อกันเช่น: CREATE INDEX pgweb_idx ON pgweb USING gin(to_tsvector('english', title || ' ' || body)); ซึ่งฉันสามารถค้นหาดังนี้: ... WHERE (to_tsvector('english', title||' '||body) @@ to_tsquery('english', 'foo')) อย่างไรก็ตามหากฉันต้องการค้นหาเฉพาะชื่อบางครั้งแค่เนื้อหาและบางครั้งทั้งสองฉันจะต้องมีดัชนีแยก 3 ตัว และถ้าฉันเพิ่มในคอลัมน์ที่สามนั่นอาจเป็น 6 ดัชนีและอื่น ๆ อีกทางเลือกหนึ่งที่ฉันไม่ได้เห็นในเอกสารเป็นเพียงการจัดทำดัชนีสองคอลัมน์แยกกันจากนั้นใช้WHERE...ORแบบสอบถามปกติ: ... WHERE (to_tsvector('english', title) @@ to_tsquery('english','foo')) OR (to_tsvector('english', body) @@ to_tsquery('english','foo')) การเปรียบเทียบทั้งสองแถวบน ~ 1 …

1
การสร้างข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Postgres ลบความจำเป็นในการจัดทำดัชนีหรือไม่
การสร้างข้อ จำกัด ที่ไม่ซ้ำกันในคอลัมน์ Postgres ลบความจำเป็นในการจัดทำดัชนีหรือไม่ ฉันคาดหวังว่าดัชนีจำเป็นสำหรับการรักษาข้อ จำกัด ได้อย่างมีประสิทธิภาพโดยอัตโนมัติ


1
B-Tree จะปรับสมดุลในระหว่างการลบข้อมูลจากตาราง SQL Server ที่มีดัชนีคลัสเตอร์หรือไม่?
ฉันมีตารางในฐานข้อมูล SQL Server ที่มีดัชนีคลัสเตอร์ในคีย์หลัก ตารางมี 1 ล้านแถว หากฉันลบแถว 10K ออกจากตารางดัชนีจะถูกปรับโครงสร้างใหม่ในระหว่างการดำเนินการลบหรือไม่? การดำเนินการลบเป็นส่วนหนึ่งของกระบวนงานที่เก็บไว้ ในแต่ละครั้งลูกค้ามากกว่าหนึ่งรายสามารถเรียกใช้งานโพรซีเดอร์ที่เก็บไว้ได้อย่างไรก็ตามการรันแต่ละรายการจะลบชุดของแถวเอง (ระบุโดยคีย์หลัก) ฉันกำลังปิดกั้นคีย์ล็อค (ประเภท U) เมื่อลูกค้าหลายรายดำเนินการตามขั้นตอน ล็อคบล็อคเป็นของแถวจากตารางเดียวกันและไม่ได้เป็นส่วนหนึ่งของการทำธุรกรรมใด ๆ ที่ทำงานพร้อมกัน ไม่ควรมีการบล็อกใด ๆ เนื่องจากการรันแต่ละครั้งพยายามลบมันเป็นชุดของแถว การยกระดับการล็อคไม่ได้เกิดขึ้นเนื่องจากปิดอยู่ ฉันสงสัยว่าการดำเนินการลบจะต้องทำให้ดัชนีมีการปรับสมดุลและดังนั้นในระหว่างกระบวนการปรับโครงสร้างจึงสามารถใช้การล็อคปุ่มบนแถวใดก็ได้ของตาราง ฉันขอขอบคุณความคิดเห็นใด ๆ เกี่ยวกับเรื่องนี้

2
การสร้างดัชนีแบบกลุ่มล้มเหลวในการสร้างตาราง
เราพบข้อผิดพลาดเมื่อเรียกใช้สคริปต์ต่อไปนี้ IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE' AND TABLE_NAME='Table_Name') BEGIN CREATE TABLE Table_Name ( Field_Name_1 binary(32) NOT NULL CONSTRAINT PK_Name_Goes_Here PRIMARY KEY NONCLUSTERED , Field_Name_2 int NOT NULL , Field_Name_3 datetime NOT NULL INDEX IX_Name_Goes_Here CLUSTERED ) END โดยเฉพาะอย่างยิ่งมันคือการสร้างดัชนีคลัสเตอร์ที่แสดงข้อผิดพลาดต่อไปนี้: ข่าวสารเกี่ยวกับ 1018, ระดับ 15, สถานะ 1, บรรทัดที่ …

3
การสร้างดัชนีที่ไม่เป็นคลัสเตอร์บน SQL Server ที่คำนวณแบบไม่คอลัมน์
ฉันกำลังดิ้นรนเพื่อค้นหาเอกสารใด ๆ เกี่ยวกับวิธีที่ SQL Server จัดเก็บคอลัมน์ที่คำนวณได้แบบไม่ยืนยัน นำตัวอย่างต่อไปนี้: --SCHEMA CREATE TABLE dbo.Invoice ( InvoiceID INT IDENTITY(1, 1) PRIMARY KEY, CustomerID INT FOREIGN KEY REFERENCES dbo.Customer(CustomerID), InvoiceStatus NVARCHAR(50) NOT NULL, InvoiceStatusID AS CASE InvoiceStatus WHEN 'Sent' THEN 1 WHEN 'Complete' THEN 2 WHEN 'Received' THEN 3 END ) GO --INDEX CREATE NONCLUSTERED …

1
ไม่ตรงกันอย่างมากระหว่างขนาดดัชนีและจำนวนบัฟเฟอร์ในแผนการดำเนินการ
ปัญหา เรามีคำถามเช่น SELECT COUNT(1) FROM article JOIN reservation ON a_id = r_article_id WHERE r_last_modified < now() - '8 weeks'::interval AND r_group_id = 1 AND r_status = 'OPEN'; ในขณะที่หมดเวลา (หลังจากผ่านไป 10 นาที) บ่อยกว่านั้นฉันตัดสินใจตรวจสอบปัญหา EXPLAIN (ANALYZE, BUFFERS)เอาท์พุทมีลักษณะเช่นนี้ Aggregate (cost=264775.48..264775.49 rows=1 width=0) (actual time=238960.290..238960.291 rows=1 loops=1) Buffers: shared hit=200483 read=64361 dirtied=666 written=8, temp …

3
ดัชนีที่กรองจะใช้ก็ต่อเมื่อส่วนที่กรองอยู่ใน JOIN ไม่ใช่ WHERE
ฉันได้สร้างดัชนีที่กรองแล้วด้านล่าง แต่เมื่อฉันเรียกใช้ 2 คิวรีเพิ่มเติมลงดัชนีนี้จะถูกใช้สำหรับการค้นหาในตัวอย่างแรกที่มี END_DTTM ใน JOIN มากกว่าข้อที่ (นั่นคือข้อแตกต่างในแบบสอบถามเท่านั้น) . ใครช่วยอธิบายได้ว่าทำไมสิ่งนี้ถึงเกิดขึ้น การสร้างดัชนี CREATE NONCLUSTERED INDEX [ix_PATIENT_LIST_BESPOKE_LIST_ID_includes] ON [dbo].[PATIENT_LIST_BESPOKE] ( [LIST_ID] ASC, [END_DTTM] ASC ) WHERE ([END_DTTM] IS NULL) แบบสอบถาม DECLARE @LIST_ID INT = 3655 --This one seeks on the index SELECT PATIENT_LISTS.LIST_ID FROM DBO.PATIENT_LISTS LEFT JOIN DBO.PATIENT_LIST_BESPOKE ON PATIENT_LISTS.LIST_ID = …

3
PostgreSQL สามารถใช้ null ในดัชนีได้หรือไม่
ฉันอ่านหนังสือเล่มนี้ซึ่งบอกว่า ฐานข้อมูลสันนิษฐานว่า Indexed_Col IS NOT NULL ครอบคลุมช่วงที่มีขนาดใหญ่เกินไปที่จะเป็นประโยชน์ดังนั้นฐานข้อมูลจะไม่ขับไปยังดัชนีจากเงื่อนไขนี้ ฉันจำได้ว่าหนังสือเล่มนี้มีความเก่าแก่กว่า 10 ปี แต่ได้รับการพิสูจน์แล้วค่อนข้างมีประโยชน์ - การใช้คำแนะนำที่รวบรวมได้จากหน้าเว็บของตนฉันได้เร่งแบบสอบถามขึ้นโดยปัจจัยที่สิบ นอกจากนี้ในการทำงานEXPLAIN ANALYZEในSELECTแบบสอบถามที่ฉันได้พบว่าไม่มีการจัดทำดัชนีของฉันจะถูกนำมาใช้แม้ในขณะที่สิทธิทั้งหมดที่พวกเขาควรจะเป็น ดังนั้นคำถามของฉันคือ: สมมติว่ามีตารางที่มีคอลัมน์ซึ่งคำจำกัดความของคอลัมน์รวมถึง "NOT NULL" และดัชนีที่มีอยู่ซึ่งครอบคลุมคอลัมน์นี้ดัชนีนี้จะถูกใช้ในแบบสอบถามของตารางนั้นซึ่งคอลัมน์เป็นส่วนหนึ่งของแบบสอบถามหรือไม่ ชอบ: CREATE TABLE my_table( a varchar NOT NULL ); CREATE INDEX ix_my_table ON my_table(a); SELECT a from my_table;

2
วิธีการกำหนดค่าใช้จ่าย / ผลประโยชน์ของการเพิ่มดัชนี?
ตามที่Craig Ringer : แม้ว่าโดยทั่วไปจะเป็นความคิดที่ดีที่จะสร้างดัชนีใน (หรือรวมถึง) คอลัมน์คีย์ต่างประเทศอ้างอิงของคุณ แต่ก็ไม่จำเป็น แต่ละดัชนีคุณเพิ่มช้า DML การดำเนินงานลดลงเล็กน้อยเพื่อให้คุณจ่ายค่าใช้จ่ายการปฏิบัติงานในทุกINSERT, หรือUPDATE DELETEหากดัชนีนั้นไม่ค่อยได้ใช้อาจไม่คุ้มค่า คุณจะทราบได้อย่างไรว่าผลประโยชน์ของการเพิ่มดัชนีเกินกว่าราคาหรือไม่ คุณโปรไฟล์หน่วยทดสอบก่อน / หลังเพิ่มดัชนีและตรวจสอบเพื่อเพิ่มประสิทธิภาพโดยรวมหรือไม่? หรือมีวิธีที่ดีกว่า

1
คีย์ DISABLE ของ MySqlDump ไม่มีผลต่อการนำเข้า
ฉันได้ติดตามคำถามก่อนหน้านี้ของฉันเกี่ยวกับความเร็วการนำเข้าด้วย Inno-Tables (ประหลาดใจ!) สถานการณ์สมมติ ฉันพยายามนำเข้าฐานข้อมูลขนาดใหญ่ * การถ่ายโอนข้อมูลในเครื่อง dev ท้องถิ่นของฉันในเวลาที่เหมาะสม เรามีจำนวนมากKEYที่แนบมากับตารางซึ่งกลายเป็นคอขวด แต่ยังคงมีความสำคัญสำหรับระบบสดของเรา แนวทางของฉันหลังจากถามคำถามข้างต้นคือการลบKEY ...คำสั่งจากการถ่ายโอนข้อมูลนำเข้าและเพิ่มคีย์อีกครั้ง อย่างไรก็ตามฉันมักจะพบว่าตัวเองกำลังแก้ไขการถ่ายโอนข้อมูลปัจจุบันเพื่อนำเข้าภายในเครื่องและฉันเจอ "ความคิดเห็น" ตลกเหล่านี้ (The disable/enable keys-lines) -- -- Dumping data for table `monster` -- LOCK TABLES `monster` WRITE; /*!40000 ALTER TABLE `monster` DISABLE KEYS */; INSERT … INSERT … INSERT /*!40000 ALTER TABLE `monster` ENABLE KEYS */; …

1
การสร้างดัชนี MySQL ล้มเหลวในตารางเต็ม
UPDATE: tl; dr: ปัญหาคือ MySQL ใช้TMPDIRเมื่อสร้างดัชนี และฉันTMPDIRก็เป็นหนึ่งในพื้นที่ดิสก์หมด ต้นฉบับ Q: ฉันพยายามที่จะเพิ่มดัชนีเพื่อตาราง InnoDB, table is full errorและได้รับการ ฉันมีพื้นที่ดิสก์เพียงพอและการตั้งค่า MySQL มีไฟล์ต่อตาราง = 1 ข้อมูลตารางคือ 85GB และฉันคิดว่าดัชนีจะอยู่ที่ประมาณ 20GB - 30GB และฉันมีพื้นที่ดิสก์มากกว่านั้น ฉันใช้ ext3 ด้วยดังนั้นฉันไม่รู้สึกว่ามีปัญหากับการ จำกัด ขนาดไฟล์จากมุมมองของระบบปฏิบัติการ ข้อผิดพลาดที่บันทึกไว้มีลักษณะดังนี้: 140616 13:04:33 InnoDB: Error: Write to file (merge) failed at offset 3 1940914176. InnoDB: 1048576 bytes should …
10 mysql  innodb  index 

1
ผงชูรส 666 เมื่อเรียกใช้แบบสอบถามแทรกในตารางดัชนี 80M แถว
น่าแปลกที่กระบวนการจัดเก็บของฉันเริ่มได้รับข่าวสารเกี่ยวกับ 666 สำหรับข้อมูลอินพุตบางส่วน กระบวนงานที่เก็บไว้ล้มเหลวในขั้นตอนสุดท้ายเมื่อพยายามแทรกแถวลงในตารางด้วยโครงสร้างต่อไปนี้: Columns: A_Id: PK, int B_Id: PK, FK, int C_Id: PK, FK, int D_Id: PK, smallint นี่คือตารางที่เชื่อมโยงเอนทิตีที่อ้างอิงทั้งหมดเข้าด้วยกัน Indexes: IX_TableName_D_id - Clustered index on D_id column PK_TableName - Unique non-clustered index on all columns (A_Id, B_Id, C_Id, D_Id) การกระจายตัวของดัชนีทั้งสองอยู่ในระดับต่ำ (<25%) อย่างไรก็ตามการแตกแฟรกเมนต์ PK_TableName เติบโตอย่างรวดเร็วเนื่องจากจำนวนการดำเนินการบนตารางค่อนข้างรุนแรง ขนาดโต๊ะ: Row count: ~80,000,000 rows …

2
ผลของการแทนที่ดัชนีด้วยดัชนีที่กรองแล้ว (ไม่ใช่ค่า null) คืออะไร?
โครงการของเราดำเนินงานฐานข้อมูลขนาดใหญ่และซับซ้อนมาก ประมาณหนึ่งเดือนที่แล้วเราสังเกตว่าช่องว่างที่ใช้โดยคอลัมน์ที่มีดัชนีซึ่งมีค่า Null มีขนาดใหญ่เกินไป เพื่อตอบสนองต่อสิ่งนั้นฉันเขียนเป็นสคริปต์ที่จะค้นหาดัชนีคอลัมน์เดี่ยวแบบไดนามิกทั้งหมดที่มีค่า Null มากกว่า 1% จากนั้นปล่อยและสร้างดัชนีเหล่านั้นใหม่เป็นดัชนีที่กรองตามเงื่อนไขที่ค่านั้นไม่ใช่ค่า NULL สิ่งนี้จะดรอปและสร้างดัชนีหลายร้อยรายการใหม่ตลอดทั้งฐานข้อมูลและเพิ่มพื้นที่ว่างเกือบ 15% ของฐานข้อมูลทั้งหมดที่ใช้ ตอนนี้ฉันมีคำถามสองข้อเกี่ยวกับเรื่องนี้: A) ข้อเสียของการใช้ดัชนีที่ถูกกรองในแบบนี้คืออะไร? ฉันจะสมมติว่ามันจะปรับปรุงประสิทธิภาพเท่านั้น แต่มีความเสี่ยงด้านประสิทธิภาพหรือไม่? B) เราได้รับข้อผิดพลาด ( 'ไม่สามารถวางดัชนี XYZ ได้เนื่องจากไม่มีอยู่หรือคุณไม่ได้รับอนุญาต' ) ในการทำดัชนีหล่นและสร้างดัชนีใหม่แม้ว่าจะได้รับการตรวจสอบแล้วก็ตามทุกอย่างเป็นไปตามที่คาดไว้ สิ่งนี้จะเกิดขึ้นได้อย่างไร? ขอบคุณสำหรับความช่วยเหลือใด ๆ ! แก้ไข:เพื่อตอบสนองต่อ @Thomas Kejser สวัสดีและขอบคุณ แต่ปรากฎว่านี่เป็นหายนะ ในเวลานั้นเราไม่เข้าใจหลายสิ่งเช่น: ระหว่างการสืบค้น SQLOS จัดทำแผนดัชนีก่อนที่จะพิจารณาว่าไม่สามารถใช้ค่า NULL สำหรับการเข้าร่วมคอลัมน์ตาราง IE คุณจำเป็นต้องมีตัวกรองคำสั่งย่อย WHERE ที่เหมาะสมสำหรับดัชนีแต่ละตัวกรองที่ใช้ในแบบสอบถามมิฉะนั้นดัชนีจะไม่ถูกใช้เลย การวางและสร้างดัชนีและอัปเดตสถิติของพวกเขาซ้ำซ้อนอีกครั้งหลังจากนั้นอาจยังไม่เพียงพอที่จะสร้างแผนที่อัปเดตซึ่งเราคิดว่าพวกเขาจะทำ มันปรากฏขึ้นในบางกรณีเพียงปริมาณงานที่มากพอที่จะบังคับให้ SQL Server ประเมินแผนอีกครั้ง …

1
Seq Scan ที่ไม่คาดคิดเมื่อทำเคียวรีกับบูลีนที่มีค่า NULL
ฉันมีคอลัมน์ฐานข้อมูลที่เรียกว่าที่คอลัมน์ชนิดคือauto_review booleanมีดัชนีสำหรับฟิลด์นั้นซึ่งสร้างโดยใช้ ActiveRecord ORM CREATE INDEX index_table_on_auto_renew ON table USING btree (auto_renew); เมื่อฉันสอบถามฟิลด์สำหรับค่าบูลีน PG จะใช้ดัชนีตามที่คาดไว้ EXPLAIN for: SELECT "table".* FROM "table" WHERE "table"."auto_renew" = 'f' QUERY PLAN ---------------------------------------------------------------------------------------------- Bitmap Heap Scan on table (cost=51.65..826.50 rows=28039 width=186) Filter: (NOT auto_renew) -> Bitmap Index Scan on index_domains_on_auto_renew (cost=0.00..44.64 rows=2185 width=0) Index Cond: …

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