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

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

1
เพิ่มประสิทธิภาพการสืบค้นฐานข้อมูลขนาดใหญ่ (25+ ล้านแถวโดยใช้ max () และ GROUP BY)
ฉันใช้ Postgres 9.3.5 และฉันมีตารางขนาดใหญ่ในฐานข้อมูลปัจจุบันมี 25 ล้านแถวและมีแนวโน้มที่จะใหญ่ขึ้นอย่างรวดเร็ว ฉันพยายามเลือกแถวที่เฉพาะเจาะจง (ทุกแถวมีเฉพาะแถวunit_idล่าสุดunit_timestampสำหรับแถวแต่ละแถว) ด้วยข้อความค้นหาง่ายๆเช่น: SELECT unit_id, max(unit_timestamp) AS latest_timestamp FROM all_units GROUP BY unit_id; ไม่มีดัชนีใด ๆ แบบสอบถามนี้ใช้เวลาประมาณ 35 วินาทีในการดำเนินการ ด้วยดัชนีที่กำหนด ( CREATE INDEX partial_idx ON all_units (unit_id, unit_timestamp DESC);) เวลาแบบสอบถามจะสั้นลงเป็นประมาณ (เท่านั้น) 19 วินาที ฉันสงสัยว่าจะเป็นไปได้หรือไม่ที่จะเรียกใช้คิวรีของฉันในเวลาที่น้อยลง (เช่นเพียงไม่กี่วินาที) และถ้าเป็นเช่นนั้นฉันควรทำตามขั้นตอนใดเพื่อปรับให้เหมาะสมยิ่งขึ้นไปอีก การถ่ายโอนข้อมูลโครงสร้างตารางของฉันมีลักษณะเช่นนี้: CREATE TABLE "all_units" ( "unit_id" int4 NOT NULL, …

2
เคียวรีที่มีประสิทธิภาพเพื่อรับค่าสูงสุดต่อกลุ่มจากตารางขนาดใหญ่
รับตาราง: Column | Type id | integer latitude | numeric(9,6) longitude | numeric(9,6) speed | integer equipment_id | integer created_at | timestamp without time zone Indexes: "geoposition_records_pkey" PRIMARY KEY, btree (id) ตารางมี 20 ล้านบันทึกที่ไม่ได้พูดค่อนข้างมาก แต่มันทำให้การสแกนตามลำดับช้าลง ฉันจะได้รับบันทึกสุดท้ายmax(created_at)ของแต่ละรายการได้equipment_idอย่างไร ฉันได้ลองค้นหาทั้งสองข้อต่อไปนี้โดยมีหลายรุ่นที่ฉันได้อ่านจากคำตอบของหัวข้อนี้: select max(created_at),equipment_id from geoposition_records group by equipment_id; select distinct on (equipment_id) equipment_id,created_at from …

1
ย้ายคีย์หลักไปยังกลุ่มไฟล์ (SQL Server 2012)
ฉันจะย้ายคีย์หลักแบบคลัสเตอร์ไปยังกลุ่มไฟล์ใหม่ได้อย่างไร ฉันได้พบ "อัลกอริทึม" ที่เป็นไปได้แล้ว แต่มันไม่มีประสิทธิภาพอย่างน่ากลัว: วางดัชนีที่ไม่ได้ทำคลัสเตอร์ (ต้องการให้สร้างใหม่และสร้างใหม่) ดร็อปดัชนีแบบคลัสเตอร์ (ต้องใช้ทั้งตารางเพื่อนำไปใช้) สร้างข้อ จำกัด คีย์หลักใหม่ (การดำเนินการเรียงลำดับขนาดใหญ่) สร้างดัชนีที่ไม่ทำคลัสเตอร์ทั้งหมด (จำเป็นต้องมีการเรียงลำดับและการเขียน) มีวิธีที่มีประสิทธิภาพมากกว่านี้ไหม? สิ่งนี้ไม่มีประสิทธิภาพอย่างน่ากลัวและใช้เวลานานเนื่องจากตารางมีขนาด 50GB บนเซิร์ฟเวอร์ที่อ่อนแอ ไม่มีวิธีที่จะข้ามสิ่งเหล่านี้ทั้งหมดและสร้างใหม่ในกลุ่มไฟล์ใหม่หรือไม่ ที่จะไม่ต้องเรียงลำดับข้อมูลใด ๆ

4
คิวรีช้าลงบนโต๊ะขนาดใหญ่ที่มี GROUP BY และ ORDER BY
ฉันมีตารางที่มี 7.2 ล้านสิ่งอันดับซึ่งมีลักษณะดังนี้: table public.methods column | type | attributes --------+-----------------------+---------------------------------------------------- id | integer | not null DEFAULT nextval('methodkey'::regclass) hash | character varying(32) | not null string | character varying | not null method | character varying | not null file | character varying | not null type | character …

1
พฤติกรรมของข้อมูลในดัชนีตามปัจจัยการเติม
สมมติว่าคุณมีฐานข้อมูลที่ปัจจัยการเติมเริ่มต้นคือ 20 เมื่อใดก็ตามที่ข้อมูลถูกแทรกมันจะสร้างหน้าเว็บที่เต็มไปถึง 20% เท่านั้นหรือไม่? จากความเข้าใจของฉันเมื่อข้อมูลถูกแทรกจะมีประมาณ 20% ของข้อมูลในหน้า อย่างไรก็ตามเมื่อมีการอัพเดทข้อมูลมันจะขยายไปเป็นดัชนีมากกว่า 20% เพื่อบรรจุและสร้างการแบ่งหน้าใช่ไหม?

1
วิธีการจัดทำดัชนีของแบบสอบถามด้วยฟิลด์ WHERE IS NULL คืออะไร
ฉันมีตารางที่มีจำนวนมากแทรกการตั้งค่าหนึ่งของฟิลด์ ( uploaded_at) NULLเพื่อ จากนั้นภารกิจตามระยะเวลาจะเลือกสิ่งอันดับทั้งหมดWHERE uploaded_at IS NULLประมวลผลและอัปเดตตั้งค่าuploaded_atเป็นวันที่ปัจจุบัน ฉันควรจัดทำดัชนีตารางอย่างไร ฉันเข้าใจว่าฉันควรใช้ดัชนีบางส่วนเช่น: CREATE INDEX foo ON table (uploaded_at) WHERE uploaded_at IS NULL หรือว่าอย่างนั้น ฉันบิตสับสน NULLแต่ถ้ามันเป็นสิ่งที่ถูกต้องเพื่อดัชนีในเขตข้อมูลที่อยู่เสมอ หรือถ้ามันถูกต้องที่จะใช้ดัชนี b-tree Hash ดูเหมือนเป็นความคิดที่ดีกว่า แต่ล้าสมัยและไม่ได้รับการจำลองแบบผ่านการสตรีมการจำลองแบบ hot-standby คำแนะนำใด ๆ ที่จะได้รับการชื่นชมอย่างมาก ฉันได้ทดลองเล็กน้อยด้วยดัชนีต่อไปนี้: "foo_part" btree (uploaded_at) WHERE uploaded_at IS NULL "foo_part_id" btree (id) WHERE uploaded_at IS NULL และตัววางแผนแบบสอบถามดูเหมือนว่าจะเลือกfoo_partดัชนีเสมอ explain analyseยังให้ผลลัพธ์ที่ดีขึ้นเล็กน้อยสำหรับfoo_partดัชนี: …

4
มีวิธีแสดงคำสั่งการสร้างสำหรับดัชนีใน PostgreSQL
ฉันต้องสร้างดัชนีใหม่ใน PostgreSQL ซึ่งได้รับความเดือดร้อนดัชนีขยายตัว เนื่องจากฉันต้องการให้ดัชนีใช้งานได้ในขณะที่กำลังสร้างฉันไม่สามารถใช้ REINDEX ได้ ฉันจะสร้างดัชนีใหม่ด้วยชื่อใหม่แล้วปล่อยดัชนีเก่า มีวิธีใดบ้างที่จะเห็นคำสั่ง SQL ที่ใช้สร้างดัชนีเพื่อให้ฉันสามารถคัดลอกได้?
14 postgresql  index 

1
ดัชนีที่บีบอัด SQL Server ยังคงถูกบีบอัดในการสร้างใหม่โดยไม่ระบุการบีบอัดข้อมูลหรือไม่
หลังจากสร้างดัชนี SQL Server อีกครั้งโดยใช้การบีบอัดหน้า ( ALTER INDEX IX1 REBUILD PARTITION = ALL WITH (DATA_COMPRESSION = PAGE)) ให้ทำการสร้างใหม่ในภายหลัง (ตามที่สคริปต์การบำรุงรักษาบางรายการผ่านเกณฑ์การแตกแฟรกเมนต์) จำเป็นต้องระบุการบีบอัดข้อมูลอีกครั้งหรือไม่ มิฉะนั้นดัชนีจะแตกอย่างมีประสิทธิภาพหรือไม่

3
ไม่ได้ใช้ 512 ไบต์จากหน้าข้อมูล 8 KByte ของ SQL Server
ฉันสร้างตารางต่อไปนี้: CREATE TABLE dbo.TestStructure ( id INT NOT NULL, filler1 CHAR(36) NOT NULL, filler2 CHAR(216) NOT NULL ); จากนั้นสร้างดัชนีคลัสเตอร์: CREATE CLUSTERED INDEX idx_cl_id ON dbo.TestStructure(id); ต่อไปฉันเติมด้วย 30 แถวแต่ละขนาดคือ 256 ไบต์ (ตามประกาศตาราง): DECLARE @i AS int = 0; WHILE @i < 30 BEGIN SET @i = @i + 1; INSERT INTO …

1
ดัชนีแบบคลัสเตอร์ไม่ได้ใช้ในคำสั่งลบ
ฉันมีตาราง SQL Server ที่กำหนดดังนี้ CREATE TABLE [dbo].[Production_Detail] ( [Id] [bigint] NOT NULL DEFAULT (NEXT VALUE FOR [dbo].[Production_Detail_Seq]), [Meta_Data_ID] INT NOT NULL , [Production_Detail_Time] DATETIME NOT NULL, [Production_Detail_Time_Local] DATETIME NOT NULL, [Production_Detail_Value] FLOAT NULL, [IntegratedDM] BIT NOT NULL DEFAULT 0, [DailyIntegratedDM] BIT NOT NULL DEFAULT 0, [InsertedDate] DateTime NOT NULL, [ModifiedDate] …

2
การเพิ่มดัชนีไปยังตาราง mysql ขนาดใหญ่
ฉันมีโต๊ะ | base_schedule_line_items | สร้างตารางbase_schedule_line_items( idint (10) unsigned NOT NULL AUTO_INCREMENT, installmentint (10) unsigned NOT NULL, on_dateวันที่ NOT NULL, actual_dateวันที่ DEFAULT NULL, payment_typeint (11) NOT NULL, scheduled_principal_outstandingทศนิยม (65,0) NOT NULL, scheduled_principal_dueทศนิยม (65,0) ไม่เป็น NULL, scheduled_interest_outstandingทศนิยม (65,0) ไม่เป็น NULL, scheduled_interest_dueทศนิยม (65,0) ไม่เป็น NULL, currencyint (11) ไม่เป็น NULL, วันที่และเวลา updated_atไม่เป็นค่าเริ่มต้น '2013-01-06 14:29:16', …


2
มีประโยชน์ใดบ้างในการเรียงลำดับคอลัมน์เมื่อกำหนดดัชนี
ตัวอย่างเช่นถ้าฉันมีสองดัชนี: CREATE INDEX IDX_1 ON MY_TABLE_1 (ITEM, DATE, LOCATION) COMPUTE STATISTICS; CREATE INDEX IDX_2 ON MY_TABLE_1 (DATE, LOCATION, ITEM) COMPUTE STATISTICS; สิ่งนี้จะทำให้IDX_2ซ้ำซ้อนหรือไม่ ถ้าไม่ฉันจะกำหนดลำดับของการประกาศคอลัมน์ได้อย่างไร ฉันควรปรับดัชนีให้เหมาะกับข้อความค้นหาทั่วไปหรือไม่
13 oracle  index 

2
วิธีการเลื่อนระดับดัชนีที่มีอยู่เป็นคีย์หลักใน PostgreSQL
ฉันรู้วิธีสร้างคีย์หลักภายในตาราง แต่ฉันจะสร้างดัชนีที่มีอยู่เป็นคีย์หลักได้อย่างไร ฉันพยายามที่จะคัดลอกตารางที่มีอยู่จากฐานข้อมูลหนึ่งไปยังอีก เมื่อฉันแสดงตารางดัชนีที่ด้านล่างจะอยู่ในรูปแบบนี้: "my_index" PRIMARY KEY, btree (column1, column2) ฉันได้สร้างดัชนีโดย: CREATE INDEX my_index ON my_table (column1, column2) แต่ฉันไม่ทราบวิธีการทำให้เป็นคีย์หลัก ... อัปเดต: เวอร์ชันของเซิร์ฟเวอร์ของฉันคือ 8.3.3

2
การใช้พื้นที่บน sys.allocation_units และ sp_spaceused
มันเป็นความจริงที่รู้จักกันว่า DMVs ไม่ได้เก็บข้อมูลที่ถูกต้องเกี่ยวกับจำนวนหน้าและจำนวนแถว อย่างไรก็ตามเมื่อคุณอัปเดตสถิติฉันไม่สามารถเห็นได้ว่าทำไมพวกเขาถึงไม่ทำ ฉันกำลังทำงานกับเครื่องมือตรวจสอบ, ต้องการทราบขนาดดิสก์ของแต่ละดัชนีและข้อมูล ฯลฯ ในที่สุดฉันต้องการค้นหาปัจจัยเติมที่เหมาะสมและสิ่งอื่น ๆ เป็นต้น พื้นที่ที่ใช้โดยฟังก์ชั่นของฉันและ sp_spaceused เก่าแตกต่างกันเล็กน้อยในการใช้พื้นที่ แต่ไม่ได้อยู่ในการบันทึก คุณเห็นหรือไม่ว่ามีอะไรขาดหายไปในการเลือกของฉัน นี่คือ sp_spaceused (จากนั้นฉันแปลงตัวเลขเป็น MB): sp_spaceused 'tblBOrderRelationship' go select 318008/1024.00 AS reserved, 140208/1024.00 AS data, 177048/1024.00 AS index_size, 752/1024.00 AS unused แต่เมื่อฉันเลือกตัวเลือกโค้ดด้านล่าง \ ภาพด้านล่างฉันได้รับตัวเลขที่แตกต่างกันเล็กน้อย SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED SELECT schema_name(t.schema_id) as SchemaName, t.NAME AS …

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