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

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

1
การหยุดชะงักเมื่ออัพเดตแถวต่าง ๆ ด้วยดัชนีที่ไม่ทำคลัสเตอร์
ฉันกำลังแก้ไขปัญหาการหยุดชะงักในขณะที่ฉันสังเกตเห็นว่าพฤติกรรมการล็อคแตกต่างกันเมื่อฉันใช้ดัชนีแบบคลัสเตอร์และแบบไม่รวมกลุ่มบนฟิลด์รหัส ปัญหาการหยุดชะงักดูเหมือนว่าจะได้รับการแก้ไขหากดัชนีหรือคีย์หลักที่ถูก clusted ถูกนำไปใช้กับฟิลด์ id ฉันมีการทำธุรกรรมที่แตกต่างกันที่ทำการอัปเดตแถวที่แตกต่างกันอย่างน้อยหนึ่งรายการเช่นธุรกรรม A จะอัปเดตแถวที่มี ID = a เท่านั้น tx B จะแตะแถวที่มี ID = b เท่านั้น และฉันเข้าใจดีว่าหากไม่มีดัชนีการอัปเดตจะได้รับการอัพเดตการล็อคสำหรับแถวทั้งหมดและแปลงเป็นล็อคแบบเอกสิทธิ์เฉพาะบุคคลเมื่อจำเป็นซึ่งในที่สุดจะนำไปสู่การหยุดชะงัก แต่ฉันล้มเหลวในการค้นหาสาเหตุที่มีดัชนีที่ไม่ใช่คลัสเตอร์การหยุดชะงักยังคงอยู่ที่นั่น (แม้ว่าอัตราการเข้าชมดูเหมือนจะลดลง) ตารางข้อมูล: CREATE TABLE [dbo].[user]( [id] [int] IDENTITY(1,1) NOT NULL, [userName] [nvarchar](255) NULL, [name] [nvarchar](255) NULL, [phone] [nvarchar](255) NULL, [password] [nvarchar](255) NULL, [ip] [nvarchar](30) NULL, [email] [nvarchar](255) NULL, [pubDate] …

2
วิธีเพิ่มความเร็วในการเรียงลำดับโดยการเรียงลำดับเมื่อใช้ดัชนี GIN ใน PostgreSQL
ฉันมีโต๊ะแบบนี้: CREATE TABLE products ( id serial PRIMARY KEY, category_ids integer[], published boolean NOT NULL, score integer NOT NULL, title varchar NOT NULL); ผลิตภัณฑ์สามารถเป็นของหลายหมวดหมู่ category_idsคอลัมน์เก็บรายการรหัสประจำตัวของหมวดหมู่ผลิตภัณฑ์ทั้งหมด ข้อความค้นหาทั่วไปจะมีลักษณะดังนี้ (ค้นหาหมวดหมู่เดียวเสมอ): SELECT * FROM products WHERE published AND category_ids @> ARRAY[23465] ORDER BY score DESC, title LIMIT 20 OFFSET 8000; เพื่อเพิ่มความเร็วฉันใช้ดัชนีต่อไปนี้: CREATE INDEX idx_test1 …

2
ทำไมส่วนคำสั่ง WHERE ของฉันจึงได้รับประโยชน์จากคอลัมน์ "รวม"
ตามคำตอบนี้เว้นแต่ว่าดัชนีจะถูกสร้างขึ้นเหนือคอลัมน์ที่ใช้ในการ จำกัด การสืบค้นจะไม่ได้รับประโยชน์จากดัชนี ฉันมีคำจำกัดความนี้: CREATE TABLE [dbo].[JobItems] ( [ItemId] UNIQUEIDENTIFIER NOT NULL, [ItemState] INT NOT NULL, [ItemPriority] INT NOT NULL, [CreationTime] DATETIME NULL DEFAULT GETUTCDATE(), [LastAccessTime] DATETIME NULL DEFAULT GETUTCDATE(), -- other columns ); CREATE UNIQUE CLUSTERED INDEX [JobItemsIndex] ON [dbo].[JobItems]([ItemId] ASC); GO CREATE INDEX [GetItemToProcessIndex] ON [dbo].[JobItems]([ItemState], [ItemPriority], [CreationTime]) …

1
วิธีเพิ่มประสิทธิภาพของแบบสอบถามเพื่อให้ค้นหาในดัชนีหนึ่งก่อนจากนั้นจึงสร้างดัชนีอื่นหลังจากนั้น
ฉันมีการวัดโลกสองชุดจากข้อมูลดาวเทียมแต่ละชุดมีเขตเวลา (mjd สำหรับค่าจูเลียนเฉลี่ย) และตำแหน่งทางภูมิศาสตร์ (GeoPoint, spacial) และฉันกำลังมองหาความบังเอิญระหว่างสองชุดดังกล่าวซึ่งเวลาของพวกเขาตรงกับเกณฑ์ของ 3 ชั่วโมง (หรือ .125 วัน) และระยะทางของพวกเขาภายใน 200 กม. ของกันและกัน ฉันสร้างดัชนีสำหรับทั้งฟิลด์ mjd บนทั้งตารางและตารางเชิงพื้นที่ เมื่อฉันเพิ่งเข้าร่วมในข้อ จำกัด เวลาฐานข้อมูลจะคำนวณการแข่งขัน 100,000 ครั้งใน 8 วินาทีและคำนวณระยะทางสำหรับการแข่งขันทั้งหมด 100,000 ครั้งในเวลานั้น แบบสอบถามมีลักษณะดังนี้: select top 100000 h.Time, m.Time, h.GeoPoint.STDistance(m.GeoPoint)/1000.0 from L2V5.dbo.header h join L2.dbo.MLS_Header m on h.mjd between m.mjd-.125 and m.mjd+.125 option( table hint …

2
การลดการอ่านที่ทำดัชนีด้วยเกณฑ์ที่ซับซ้อน
ฉันกำลังปรับฐานข้อมูลตั๋วทำงาน Firebird 2.5 ให้เหมาะสม พวกมันถูกเก็บไว้ในตารางที่ประกาศเช่นนี้ CREATE TABLE TICKETS ( TICKET_ID id PRIMARY KEY, JOB_ID id, ACTION_ID id, STATUS str256 DEFAULT 'Pending' ); โดยทั่วไปฉันต้องการค้นหาตั๋วใบแรกที่ยังไม่ได้ดำเนินการและอยู่ในPendingสถานะ ลูปการประมวลผลของฉันจะเป็น: รับตั๋วที่ 1 Pending ทำงานกับ Ticket อัปเดตสถานะตั๋ว => Complete ทำซ้ำ ไม่มีอะไรแฟนซีเกินไป ถ้าฉันดูฐานข้อมูลในขณะที่การวนรอบนี้ทำงานฉันจะเห็นจำนวนการอ่านดัชนีที่จัดทำขึ้นสำหรับการทำซ้ำแต่ละครั้ง ดูเหมือนว่าประสิทธิภาพจะลดลงอย่างมากไม่ได้ แต่เครื่องที่ฉันทดสอบอยู่นั้นค่อนข้างเร็ว อย่างไรก็ตามฉันได้รับรายงานประสิทธิภาพการทำงานลดลงเมื่อเวลาผ่านไปจากผู้ใช้ของฉัน ฉันได้ดัชนีมาStatusแล้ว แต่ก็ยังดูเหมือนว่ามันจะทำการสแกนTicket_Idคอลัมน์แต่ละรอบซ้ำ ดูเหมือนว่าฉันจะมองอะไรบางอย่าง แต่ฉันไม่แน่ใจ จำนวนการปีนขึ้นของการอ่านดัชนีนั้นเป็นไปตามที่คาดการณ์ไว้หรือไม่ - แก้ไขความคิดเห็น - ใน Firebird คุณจะ จำกัด …

2
เหตุใดแบบสอบถามนี้จึงไม่ใช้ดัชนีที่ไม่ได้เป็นคลัสเตอร์ของฉันและฉันจะสร้างมันได้อย่างไร
ตามมาถึงคำถามนี้เกี่ยวกับการเพิ่มประสิทธิภาพการค้นหาฉันต้องการทราบว่ามีวิธีในการทำให้ดัชนีของฉันถูกใช้เป็นค่าเริ่มต้นหรือไม่ แบบสอบถามนี้ทำงานในประมาณ 2.5 วินาที: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31'; อันนี้ทำงานในประมาณ 33ms: SELECT TOP 1000 * FROM [CIA_WIZ].[dbo].[Heartbeats] WHERE [DateEntered] BETWEEN '2011-08-30' and '2011-08-31' ORDER BY [DateEntered], [DeviceID]; มีดัชนีคลัสเตอร์ในฟิลด์ [ID] (pk) และมีดัชนีที่ไม่ใช่คลัสเตอร์ใน [DateEntered], [DeviceID] แบบสอบถามแรกใช้ดัชนีคลัสเตอร์แบบสอบถามที่สองใช้ดัชนีที่ไม่ใช่คลัสเตอร์ของฉัน คำถามของฉันคือสองส่วน: ทำไมเนื่องจากแบบสอบถามทั้งสองมีส่วนคำสั่ง WHERE ในฟิลด์ [DateEntered] เซิร์ฟเวอร์จึงใช้ดัชนีคลัสเตอร์ในครั้งแรก แต่ไม่ใช่อันดับที่สองหรือไม่ ฉันจะทำให้ดัชนีที่ไม่ใช่แบบคลัสเตอร์นั้นถูกใช้เป็นค่าเริ่มต้นในแบบสอบถามนี้ได้โดยไม่ต้องสั่งซื้อ (หรือเพราะเหตุใดฉันจึงไม่ต้องการพฤติกรรมนั้น)

4
การพิจารณาว่าดัชนีบนตารางไม่ได้ถูกใช้
ฉันใช้สคริปต์นี้เพื่อพยายามค้นหาดัชนีที่ไม่เกี่ยวข้อง select o.name as TableName, i.name as IndexName, p.reserved_page_count * 8.0 / 1024 as SpaceInMB, s.* from sys.dm_db_index_usage_stats s inner join sys.objects o on s.object_id = o.object_id inner join sys.indexes i on i.index_id = s.index_id and i.object_id = o.object_id inner join sys.dm_db_partition_stats p on i.index_id = p.index_id and o.object_id = …

2
การใช้ตรรกะไม่เกี่ยวกับดัชนี
ตามหนังสือของ Microsoft เกี่ยวกับการพัฒนาฐานข้อมูลข้อสอบ 70-433:การพัฒนาฐานข้อมูลMicrosoft SQL Server 2008 : อักขระตัวแทนที่ไม่ใช่ตัวอักษรไม่ใช่ตรรกะอนุญาตให้เครื่องมือเพิ่มประสิทธิภาพคิวรีใช้ดัชนีเพื่อเพิ่มประสิทธิภาพการค้นหา เพื่อประสิทธิภาพสูงสุดคุณควรหลีกเลี่ยงการใช้ไม่คำหลักและนำสัญลักษณ์สัญลักษณ์แทน ดังนั้นฉันจึงเป็นแบบNOT INนั้นNOT EXISTSเป็นต้น ขณะนี้เกี่ยวกับคำถามSOนี้ฉันคิดว่าโซลูชันที่เลือกโดย @GBN จะละเมิดคำแถลงที่ระบุไว้ด้านบน เห็นได้ชัดว่ามันไม่ได้ ดังนั้นคำถามของฉันคือ: ทำไม


3
ดัชนีมีผลต่อประสิทธิภาพการค้นหาอย่างไร
เห็นได้ชัดว่าการรักษาดัชนีที่แตกต่างกันหลายประการมีผลกระทบด้านลบต่อประสิทธิภาพการแทรกและลบ แล้วประสิทธิภาพของคิวรี: มันสมเหตุสมผลหรือไม่ที่ทำให้ดัชนีมีจำนวนมากเกินไปในตาราง? ประสิทธิภาพของแบบสอบถามจะดีขึ้นในทุกกรณีเมื่อมีการเพิ่มดัชนี (แน่นอนสำหรับแบบสอบถามที่ใช้ดัชนีเลย) หรือเป็นไปได้ว่าประสิทธิภาพของแบบสอบถามจะลดลงด้วยดัชนีมากเกินไปเพราะจำเป็นต้องปรึกษาดัชนีทั้งหมดเพื่อรับ ผลลัพธ์? ในกรณีที่มีดัชนีแตกต่างกันในตาราง: พวกเขาทั้งหมดจะได้รับการพิจารณาหรือเฉพาะที่ดีที่สุดจากมุมมองของเครื่องมือเพิ่มประสิทธิภาพ? ออราเคิลใช้ดัชนีหลายมิติหรือไม่?

2
แคตตาล็อกข้อความแบบเต็มพร้อมการเปลี่ยนแปลงจะติดตาม: AUTO จะอัปเดตโดยอัตโนมัติหรือไม่หากการติดตามการเปลี่ยนแปลงสำหรับตารางนั้นไม่ได้เปิดใช้งานหรือไม่
ฉันมีตารางฐานข้อมูลนี้ที่ควรเก็บดัชนีข้อความแบบล่าสุด อย่างไรก็ตามฉันไม่เห็นว่าเกิดขึ้นเลย (ไม่มีข้อผิดพลาดในบันทึกเพราะบันทึกล่าสุดที่ฉันเห็นคือเมื่อฉันเรียกมันด้วยตนเอง) นี่คือสิ่งที่ฉันเห็น ... แต่บนโต๊ะตัวเอง ... นี่อาจเป็นสาเหตุที่ไม่เกิดขึ้นโดยอัตโนมัติหรือไม่

2
สแกนดัชนีช้าในตารางขนาดใหญ่
ใช้ PostgreSQL 9.2 ฉันมีปัญหากับการสืบค้นที่ช้าในตารางที่ค่อนข้างใหญ่ (200+ ล้านแถว) ฉันไม่ได้พยายามอะไรที่บ้าคลั่งเพียงแค่เพิ่มคุณค่าทางประวัติศาสตร์ ด้านล่างคือแบบสอบถามและผลลัพธ์แผนแบบสอบถาม เค้าโครงตารางของฉัน: Table "public.energy_energyentry" Column | Type | Modifiers -----------+--------------------------+----------------------------------------------------------------- id | integer | not null default nextval('energy_energyentry_id_seq'::regclass) prop_id | integer | not null timestamp | timestamp with time zone | not null value | double precision | not null Indexes: "energy_energyentry_pkey" PRIMARY …

3
ข้อผิดพลาดขนาดดัชนีสูงสุดของแถว
มีขอบเขตบนสำหรับarrayคอลัมน์หรือไม่? ฉันได้รับข้อผิดพลาดนี้เมื่อแทรกเข้าไปในฟิลด์อาร์เรย์ - PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" นี่คือคำนิยามตารางของฉัน - create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); ฉันต้องการดัชนีในฟิลด์อาร์เรย์เนื่องจากฉันกำลังทำการค้นหาบางอย่างกับมัน

4
ลำดับของคอลัมน์ในดัชนี columnstore สำคัญหรือไม่
ฉันมีตารางที่มี ~ 200 ล้านแถวและอีก 15 คอลัมน์ในนั้น ฉันวางแผนที่จะสร้างCOLUMNSTOREดัชนีบนโต๊ะของฉัน จะมีการเปลี่ยนแปลงใด ๆ เกี่ยวกับประสิทธิภาพขึ้นอยู่กับลำดับของคอลัมน์ที่ฉันใช้ในดัชนี columnstore หรือไม่ ถ้าใช่ตรรกะอะไรที่อยู่เบื้องหลัง

1
INDEX บนคีย์หลักคอมโพสิตเป็นอย่างไรใน mysql
เมื่อสร้างคีย์หลักผสมสำหรับคอลัมน์สองคอลัมน์ขึ้นไปเช่นPRIMARY KEY(col1, col2, col3); ระบบจะINDEXแต่ละคอลัมน์แยกกันไหม เหตุผลที่ฉันถามคำถามนี้คือเมื่อเราใช้UNIQUE INDEX (col1, col2, col3)มันจะทำหน้าที่เป็นINDEXคอลัมน์แรกเท่านั้นและเราจำเป็นต้องสร้างINDEXคอลัมน์เพิ่มเติมสำหรับคอลัมน์อื่น ๆ ฉันต้องการทราบว่าเป็นกรณีสำหรับคีย์หลักคอมโพสิตด้วยหรือไม่

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