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

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

2
ทำไมดัชนีของฉันไม่ถูกใช้ใน SELECT TOP?
นี่คือการทำงานที่ลดลง: ฉันกำลังทำแบบสอบถามเลือก ทุกคอลัมน์ในWHEREและส่วนORDER BYคำสั่งจะอยู่ในดัชนีที่ไม่ใช่คลัสเตอร์IX_MachineryId_DateRecordedเดียวซึ่งเป็นส่วนหนึ่งของคีย์หรือเป็นINCLUDEคอลัมน์ ฉันกำลังเลือกคอลัมน์ทั้งหมดเพื่อที่จะส่งผลให้มีการค้นหาบุ๊กมาร์ก แต่ฉันกำลังทำอยู่TOP (1)ดังนั้นเซิร์ฟเวอร์จึงสามารถบอกได้ว่าการค้นหาจำเป็นต้องทำเพียงครั้งเดียวในตอนท้าย สิ่งสำคัญที่สุดคือเมื่อฉันบังคับให้แบบสอบถามใช้ดัชนีIX_MachineryId_DateRecordedมันจะทำงานในเวลาน้อยกว่าหนึ่งวินาที ถ้าฉันปล่อยให้เซิร์ฟเวอร์ตัดสินใจว่าจะใช้ดัชนีใดมันจะเลือกIX_MachineryIdและใช้เวลาประมาณหนึ่งนาที ที่แนะนำให้ฉันจริง ๆ ว่าฉันได้ทำดัชนีถูกต้องและเซิร์ฟเวอร์เพิ่งตัดสินใจไม่ถูกต้อง ทำไม? CREATE TABLE [dbo].[MachineryReading] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Location] [sys].[geometry] NULL, [Latitude] FLOAT (53) NOT NULL, [Longitude] FLOAT (53) NOT NULL, [Altitude] FLOAT (53) NULL, [Odometer] INT NULL, [Speed] FLOAT (53) NULL, [BatteryLevel] INT …

1
ดัชนีไม่ได้ใช้กับ `= any () 'แต่ใช้กับ` in'
ตารางtมีสองดัชนี: create table t (a int, b int); create type int_pair as (a int, b int); create index t_row_idx on t (((a,b)::int_pair)); create index t_a_b_idx on t (a,b); insert into t (a,b) select i, i from generate_series(1, 100000) g(i) ; ไม่มีการใช้ดัชนีกับanyผู้ประกอบการ: explain analyze select * from t where (a,b) = …

3
ประเภทคอลัมน์ UUID ที่มีประสิทธิภาพที่สุดคืออะไร
สำหรับการจัดเก็บ UUID 128 บิตมีตัวเลือกการจัดเก็บหลายตัว: คอลัมน์ไบต์ [16] สองคอลัมน์ใหญ่ / ยาว (64 บิต) คอลัมน์ CHAR (36) - เลขฐานสิบหก 32 หลัก + 4 ขีด คอลัมน์เฉพาะฐานข้อมูล UUID หาก db สนับสนุน จากมุมมองของการจัดทำดัชนีซึ่งมีประสิทธิภาพมากที่สุด? หาก db ไม่รองรับ uuid ชนิดเฉพาะที่ 1, 2, 3 เป็นตัวเลือกที่ดีที่สุด?

2
เคียวรีระยะห่างอย่างรวดเร็วขัดขวางในระดับสูงกว่า
ฉันมีฐานข้อมูลขนาดใหญ่ (แถว 16M) ที่มีแฮชการรับรู้ภาพ ฉันต้องการที่จะสามารถค้นหาแถวตามระยะทาง hammingในกรอบเวลาที่เหมาะสม ในปัจจุบันเท่าที่ฉันเข้าใจปัญหาอย่างถูกต้องแล้วฉันคิดว่าตัวเลือกที่ดีที่สุดในที่นี้คือการติดตั้ง SP-GiST แบบกำหนดเองที่ใช้BK-Treeแต่ดูเหมือนว่าจะใช้งานได้มากและฉันก็ยังคลุมเครือในทางปฏิบัติ รายละเอียดของการปรับใช้ดัชนีที่กำหนดเองอย่างเหมาะสม การคำนวณระยะทาง Hamming คือเวไนยพอและผมทำรู้ C แม้ว่า โดยพื้นฐานแล้ววิธีการที่เหมาะสมในที่นี้คืออะไร? ฉันต้องสามารถสอบถามการจับคู่ภายในระยะทางแก้ไขที่แน่นอนของแฮช ตามที่ผมเข้าใจมัน Levenshtein ระยะทางกับสตริงความยาวเท่ากันเป็นหน้าที่ hamming ระยะเพื่อให้มีอย่างน้อยบางส่วนสนับสนุนที่มีอยู่สำหรับสิ่งที่ฉันต้องการแม้ว่าจะไม่มีวิธีการที่ชัดเจนในการสร้างดัชนีจากมัน (จำค่าที่ผมสอบถาม การเปลี่ยนแปลงฉันไม่สามารถคำนวณระยะทางจากค่าคงที่ล่วงหน้าได้เนื่องจากจะมีประโยชน์สำหรับค่านั้นเท่านั้น แฮชปัจจุบันถูกเก็บเป็นสตริง 64- ถ่านที่มีการเข้ารหัส ASCII แบบไบนารีของแฮช (เช่น "10010101 ... ") แต่ฉันสามารถแปลงให้เป็น int64 ได้อย่างง่ายดาย ปัญหาจริงคือฉันต้องสามารถสืบค้นได้ค่อนข้างเร็ว ดูเหมือนว่าจะเป็นไปได้ที่จะบรรลุบางสิ่งบางอย่างตามแนวของสิ่งที่ฉันต้องการpg_trgmแต่ฉันค่อนข้างชัดเจนว่าการจับคู่ mechamism ของ trigram ทำงานอย่างไร (โดยเฉพาะการวัดความคล้ายคลึงกันที่ส่งกลับมาเป็นตัวแทนจริง ๆ )ชนิดของระยะทางแก้ไข) ประสิทธิภาพการแทรกไม่สำคัญ (ราคาแพงมากในการคำนวณแฮชสำหรับแต่ละแถว) ดังนั้นฉันจึงสนใจเกี่ยวกับการค้นหาเป็นหลัก

3
ทำไม MySQL ไม่สนใจดัชนีแม้จะมีผลบังคับใช้สำหรับการสั่งซื้อนี้ด้วย?
ฉันทำงานEXPLAIN: mysql> explain select last_name from employees order by last_name; +----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+---------------+------+---------+------+-------+----------------+ | 1 | SIMPLE | employees | ALL | NULL | NULL | NULL | NULL | …

1
เหตุใด SQL Server จึงไม่มีคำขอดัชนีที่ขาดหายไปใน DMV หรือแผนการสืบค้น
ฉันมีฐานข้อมูล SQL Server ที่แบบสอบถามค่อนข้างช้าและมีการล็อคและบล็อกจำนวนมาก เมื่อฉันดูดัชนี DMV ที่ขาดหายไปและแผนการสืบค้นไม่มีคำแนะนำใด ๆ ทำไมถึงเป็นอย่างนั้น?

2
ดัชนีที่ไม่ซ้ำที่เลื่อนออกไปใน postgres
เมื่อมองไปที่เอกสารประกอบของ postgres สำหรับตารางการเปลี่ยนแปลงดูเหมือนว่าข้อ จำกัด ทั่วไปสามารถทำเครื่องหมายเป็นDEFERRABLE(เพิ่มเติมอย่างชัดเจนINITIALLY DEFERREDซึ่งเป็นสิ่งที่ฉันสนใจ) ดัชนียังสามารถเชื่อมโยงกับข้อ จำกัด ได้ตราบใดที่: ดัชนีไม่สามารถมีคอลัมน์นิพจน์หรือดัชนีบางส่วนได้ ซึ่งทำให้ฉันเชื่อว่าขณะนี้ไม่มีวิธีที่จะมีดัชนีที่ไม่ซ้ำกับเงื่อนไขเช่น: CREATE UNIQUE INDEX unique_booking ON public.booking USING btree (check_in, check_out) WHERE booking_status = 1; จะINITIALLY DEFERREDหมายถึงว่า 'ข้อ จำกัด ' ที่ไม่ซ้ำกันจะได้รับการตรวจสอบในตอนท้ายของการทำธุรกรรม (ถ้าSET CONSTRAINTS ALL DEFERRED;ใช้) การสันนิษฐานของฉันถูกต้องและถ้าเป็นเช่นนั้นมีวิธีใดบ้างที่จะบรรลุเป้าหมายที่ต้องการ? ขอบคุณ

1
ทำไมข้อความค้นหา sqlite นี้ช้าลงมากเมื่อฉันสร้างดัชนีคอลัมน์
ฉันมีฐานข้อมูล sqlite ที่มีสองตารางแต่ละแถวมี 50,000 แถวมีชื่อ (คน) ปลอม ฉันได้สร้างแบบสอบถามง่ายๆเพื่อค้นหาจำนวนชื่อที่มี (ชื่อที่กำหนด, ชื่อกลาง, นามสกุล) ที่ใช้ร่วมกันสำหรับทั้งสองตาราง: select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial; เมื่อไม่มีดัชนียกเว้นในคีย์หลัก (ไม่เกี่ยวข้องกับแบบสอบถามนี้) มันจะทำงานอย่างรวดเร็ว: [james@marlon Downloads] $ time sqlite3 generic_data_no_indexes.sqlite "select count(*) from fakenames_uk inner join fakenames_usa on fakenames_uk.givenname=fakenames_usa.givenname and fakenames_uk.surname=fakenames_usa.surname and fakenames_uk.middleinitial=fakenames_usa.middleinitial;" 131 real 0m0.115s …

2
ดัชนีคอลัมน์ที่คำนวณแล้วไม่ได้ใช้
ฉันต้องการค้นหาแบบเร็วโดยดูจากว่ามีสองคอลัมน์เท่ากัน ฉันพยายามใช้คอลัมน์ที่คำนวณด้วยดัชนี แต่ SQL Server ดูเหมือนจะไม่ใช้มัน ถ้าฉันใช้คอลัมน์บิตที่มีค่าคงที่กับดัชนีฉันจะได้ดัชนีที่ต้องการ ดูเหมือนว่ามีคำถามอื่น ๆ เช่นนี้อยู่ที่นั่น แต่ไม่มีใครสนใจว่าทำไมดัชนีจะไม่ถูกใช้ ตารางทดสอบ: CREATE TABLE dbo.Diffs ( Id int NOT NULL IDENTITY (1, 1), DataA int NULL, DataB int NULL, DiffPersisted AS isnull(convert(bit, case when [DataA] is null and [DataB] is not null then 1 when [DataA] <> [DataB] then 1 …

1
การเข้าร่วมช่วงใหม่ค้นหาดัชนีคอมโพสิตที่ไม่สามารถใช้ได้
สำหรับสคีมาและข้อมูลตัวอย่างต่อไปนี้ CREATE TABLE T ( A INT NULL, B INT NOT NULL IDENTITY, C CHAR(8000) NULL, UNIQUE CLUSTERED (A, B) ) INSERT INTO T (A) SELECT NULLIF(( ( ROW_NUMBER() OVER (ORDER BY @@SPID) - 1 ) / 1003 ), 0) FROM master..spt_values แอปพลิเคชันกำลังประมวลผลแถวจากตารางนี้ในลำดับดัชนีแบบกลุ่มเป็นกลุ่ม 1,000 แถว 1,000 แถวแรกจะถูกดึงออกมาจากแบบสอบถามต่อไปนี้ SELECT TOP 1000 …
14 sql-server  index 

1
เมื่อเปลี่ยนขนาดของคอลัมน์ nvarchar ฉันจำเป็นต้องทำดัชนีที่ไม่ซ้ำหรือไม่? และตารางจะถูกล็อคเมื่อสร้างดัชนีใหม่หรือไม่
ในฐานข้อมูลของเรามีตารางขนาดใหญ่ที่มีลักษณะคล้ายกันมากขึ้นหรือน้อยลง: CREATE TABLE dbo.production_data ( pd_id BIGINT PRIMARY KEY, serial NVARCHAR(16) NOT NULL UNIQUE, ... ); แต่ตอนนี้ขนาดของเขตข้อมูลอนุกรมกลายเป็นต่ำดังนั้นฉันต้องการเปลี่ยนเป็น 32 schema Visual Studio เปรียบเทียบเครื่องมือแนะนำการทำเช่นนี้โดย: DROP INDEX ux_production_data_serial ON dbo.production_data; GO ALTER TABLE dbo.production_data ALTER COLUMN serial NVARCHAR(32) NOT NULL; GO CREATE INDEX ux_production_data_serial ON dbo.production_data(serial ASC); มันจำเป็นจริงๆหรือ? หรือมากกว่านั้นเป็นวิธีที่ประหยัดมากในการทำเช่นนี้? เมื่อสร้างดัชนีที่ไม่ซ้ำอีกครั้งตารางของฉันจะถูกล็อคหรือไม่ เพราะนี่จะเป็นปัญหาใหญ่ (เนื่องจากตารางมี 30 …

5
ปรับปรุงประสิทธิภาพของ sys.dm_db_index_physical_stats
ในระหว่างงานซ่อมบำรุงฉันพยายามหารายการดัชนีแยกส่วน แต่แบบสอบถามช้ามากและใช้เวลากว่า 30 นาทีในการดำเนินการ ฉันคิดว่านี่เป็นเพราะการสแกนระยะไกลบน sys.dm_db_index_physical_stats มีวิธีใดบ้างที่จะเพิ่มความเร็วคิวรีต่อไปนี้: SELECT OBJECT_NAME(i.OBJECT_ID) AS TableName, i.name AS TableIndexName FROM sys.dm_db_index_physical_stats(DB_ID(), NULL, NULL, NULL, 'DETAILED') phystat INNER JOIN sys.indexes i ON i.OBJECT_ID = phystat.OBJECT_ID AND i.index_id = phystat.index_id WHERE phystat.avg_fragmentation_in_percent > 20 AND OBJECT_NAME(i.OBJECT_ID) IS NOT NULL ORDER BY phystat.avg_fragmentation_in_percent DESC ฉันไม่ใช่ DBA และอาจทำให้เกิดข้อผิดพลาดอย่างชัดเจนในแบบสอบถามด้านบนหรืออาจมีดัชนีหรือสถิติบางอย่างที่จะช่วยได้ บางทีมันอาจเป็นเพียงขนาดของฐานข้อมูล …

3
ALTER TABLE บนตารางขนาดใหญ่พร้อมคอลัมน์ที่จัดทำดัชนี
ฉันมีตารางขนาดใหญ่ที่มีคอลัมน์ VARCHAR (20) และฉันต้องแก้ไขเพื่อให้เป็นคอลัมน์ VARCHAR (50) โดยปกติแล้วการแสดง ALTER TABLE (การเพิ่ม TINYINT) ในตารางนี้จะใช้เวลาประมาณ 90-120 นาทีในการดำเนินการดังนั้นฉันสามารถทำได้ในคืนวันเสาร์หรือวันอาทิตย์เท่านั้นเพื่อหลีกเลี่ยงผลกระทบต่อผู้ใช้ฐานข้อมูล ถ้าเป็นไปได้ฉันต้องการจะทำการแก้ไขก่อนหน้านี้ คอลัมน์ถูกทำดัชนีด้วยซึ่งฉันเข้าใจว่าจะทำให้ ALTER TABLE ช้าลงเนื่องจากต้องสร้างดัชนีใหม่หลังจากแก้ไขความยาวคอลัมน์ แอพพลิเคชั่นเว็บถูกตั้งค่าในสภาพแวดล้อมการจำลองแบบ MySQL (26 ทาสและต้นแบบหนึ่งคน) ฉันจำได้ว่าเมื่ออ่านที่ไหนสักแห่งว่าวิธีหนึ่งคือการดำเนินการ ALTER TABLE บนแต่ละสลาฟก่อน (ลดผลกระทบต่อผู้ใช้) จากนั้นทำสิ่งนี้กับ Master แต่จะไม่ลองทำซ้ำคำสั่ง ALTER TABLE กับทาส? ดังนั้นคำถามของฉันคือ: วิธีที่ดีที่สุดสำหรับฉันที่จะปรับเปลี่ยนตารางนี้มีการหยุดชะงักขั้นต่ำให้กับผู้ใช้ของฉันคืออะไร? แก้ไข: ตารางคือ InnoDB

5
ฉันจะค้นหามุมมองบันทึก 20 ล้านรายการนี้เร็วขึ้นได้อย่างไร
สำหรับฟังก์ชั่นการค้นหาฉันใช้มุมมองที่มีระเบียนจากตารางทั้งหมดที่ฉันต้องการค้นหา มุมมองมีเกือบ 20 ล้านบันทึก การค้นหามุมมองนี้ใช้เวลานานเกินไป ฉันควรปรับปรุงการทำงานของมุมมองนี้ที่ไหน คำจำกัดความคร่าวๆสำหรับมุมมองด้านล่าง ประกอบด้วยสิบสามตารางและรอบ ๆ สามสิบฟิลด์ CREATE VIEW [dbo].[v_AllForSearch] AS SELECT FT.firstField AS [firstField] , FT.fld_primary AS [fld_primary] , FT.fld_thirdField AS [thirdField] , FT.fld_fourthField AS [fourthField] , ISNULL(ST.[fld_firstSearchField],'') AS [firstSearchField] , ISNULL(TT.[fld_thirdSearch],'') AS thirdSearch , ISNULL(TT.[fld_fourthSearch],'')AS fourthSearch , ISNULL(TT.[fld_fifthSearch],'')AS fifthSearch , ISNULL(FRT.[fld_sixthSearch],'') As [sixthSearch] , ISNULL(FRT.[fld_seventhSearch],'') …

2
ดัชนีใดที่จะใช้กับค่าซ้ำจำนวนมาก
ลองทำข้อสมมติสองสามข้อ: ฉันมีตารางที่มีลักษณะดังนี้: a | b ---+--- a | -1 a | 17 ... a | 21 c | 17 c | -3 ... c | 22 ข้อเท็จจริงเกี่ยวกับชุดของฉัน: ขนาดของตารางทั้งหมดคือ ~ 10 10แถว ฉันมีแถว ~ 100k ที่มีค่าaในคอลัมน์aคล้ายกับค่าอื่น ๆ (เช่นc) นั่นหมายถึง ~ 100k ค่าที่แตกต่างในคอลัมน์ 'a' select sum(b) from t where a = 'c'ส่วนใหญ่เป็นคำสั่งของฉันจะอ่านทั้งหมดหรือส่วนใหญ่ของค่าสำหรับค่าที่กำหนดในเช่น …

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