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

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

3
ลำดับฟิลด์ในลำดับดัชนีคอมโพสิตที่มีการเลือกสูงและฟิลด์การเลือกต่ำ
ฉันมีตาราง SQL Server ที่มีมากกว่า 3 พันล้านแถว หนึ่งในคำถามของฉันใช้เวลานานมากดังนั้นฉันจึงพิจารณาที่จะเพิ่มประสิทธิภาพ แบบสอบถามมีลักษณะดังนี้: SELECT [Enroll_Date] ,Count(*) AS [Record #] ,Count(Distinct UserID) AS [User #] FROM UserTable GROUP BY [Enroll_Date] [Enroll_Date] เป็นคอลัมน์การเลือกต่ำที่มีค่าน้อยกว่า 50 ค่าในขณะที่คอลัมน์ UserID เป็นคอลัมน์เลือกสูงที่มีค่าแตกต่างกันมากกว่า 200 ล้านรายการ จากการวิจัยของฉันฉันเชื่อว่าฉันควรสร้างดัชนีคอมโพสิตแบบไม่รวมกลุ่มในสองคอลัมน์นี้และในทางทฤษฎีแล้วคอลัมน์การเลือกสูงควรเป็นคอลัมน์แรก แต่ฉันไม่แน่ใจว่าในกรณีของฉันจะทำงานได้เพราะฉันใช้คอลัมน์หัวกะทิต่ำในกลุ่มโดยข้อ ตารางนี้ไม่มีดัชนีคลัสเตอร์

1
ไม่ใช้ดัชนี SEEK เว้นแต่ OPTION (RECOMPILE)?
(คำถามย้ายจาก SO) ฉันมีตาราง (ข้อมูลหุ่น) ที่มีดัชนีคลัสเตอร์ประกอบด้วย 2 คอลัมน์: ตอนนี้ฉันเรียกใช้แบบสอบถามทั้งสองนี้: declare @productid int =1 , @priceid int = 1 SELECT productid, t.priceID FROM Transactions AS t WHERE (productID = @productid OR @productid IS NULL) AND (priceid = @priceid OR @priceid IS NULL) SELECT productid, t.priceID FROM Transactions AS t WHERE (productID = …

1
เหตุใดดัชนีของฉันจึงสามารถค้นหาประมาณจำนวนแถวที่ถูกต้องและตัวดำเนินการเรียงลำดับไม่ได้
ฉันมีแบบสอบถามที่ใช้ฟังก์ชันในเพรดิเคตบางอย่างเช่นนี้: commentType = 'EL' AND commentDateTime >= DATEADD(month,datediff(month,0,getdate()) - 13,0) ฉันมีดัชนีตัวกรองใน commentType ที่มีแถว 40K และเมื่อฉันเรียกใช้แบบสอบถามจำนวนแถวโดยประมาณสำหรับดัชนี Seek นั้นแม่นยำมาก (ประมาณ 11K) แต่สำหรับขั้นตอนต่อไป (ตัวดำเนินการเรียงลำดับ) จะไม่สนใจสถิติและ เพียงประมาณจำนวนแถวทั้งหมดในดัชนีที่กรอง ทำไมสิ่งนี้จึงเกิดขึ้น ฉันรู้พื้นฐานเกี่ยวกับการsargabilityและฉันทดสอบเพียงเพื่อความมีสติแทน dateadd ตามวันที่จริง (2014-01-01) และ voila ... การเรียงลำดับเริ่มเดาจำนวนแถวอย่างถูกต้อง ... เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร ฉันไม่สามารถผ่านวันที่แน่นอน ...

1
จะเกิดอะไรขึ้นเมื่อเราเพิ่มดัชนีไปยังตารางที่มีอยู่ด้วยข้อมูลจำนวนมาก
ฉันมีตารางซึ่งจะมีประมาณ ~ 15 ล้านระเบียน ตอนนี้ฉันต้องเพิ่มดัชนีในตาราง การเพิ่มดัชนีจะใช้เวลาในการอัปเดตทุกรายการในตาราง ฉันค่อนข้างสับสนว่าการเพิ่มดัชนีจะทำให้ระบบหยุดทำงานหรือไม่ ถ้าใช่ฉันจะเอาชนะการหยุดทำงานได้อย่างไร

1
การสร้างดัชนีบนตารางที่ยุ่งมาก
เรามีโต๊ะที่มีจำนวนมากinsert\selectทุกครั้ง (เช่น 100 เครื่องที่แทรกการอัพเดททุกวินาที) วิธีที่ดีที่สุดในการสร้างดัชนีบนตารางที่ไม่สามารถล็อคไม่ได้เป็นวินาทีคืออะไร? ถ้าฉันสร้างดัชนีฉันแน่ใจว่ามันจะล็อคคำขอและฉันทำไม่ได้ มันเป็นตารางขนาดใหญ่ที่มี 1 ล้านแถว +

1
วิธีตั้งค่ามุมมองที่จัดทำดัชนีไว้เมื่อเลือก TOP 1 ด้วย ORDER BY จากตารางที่แตกต่างกัน
ฉันกำลังพยายามติดตั้งมุมมองที่จัดทำดัชนีไว้ในสถานการณ์จำลองต่อไปนี้เพื่อให้แบบสอบถามต่อไปนี้ทำงานได้โดยไม่สแกนดัชนีคลัสเตอร์ เมื่อใดก็ตามที่ฉันสร้างมุมมองดัชนีสำหรับแบบสอบถามนี้แล้วใช้มันดูเหมือนว่าจะไม่สนใจดัชนีใด ๆ ที่ฉันวางไว้: -- +++ THE QUERY THAT I WANT TO IMPROVE PERFORMANCE-WISE +++ SELECT TOP 1 * FROM dbo.TB_test1 t1 INNER JOIN dbo.TB_test2 t2 ON t1.PK_ID1 = t2.FK_ID1 ORDER BY t1.somethingelse1 ,t2.somethingelse2; GO การตั้งค่าตารางมีดังนี้: สองตาราง พวกเขาจะเข้าร่วมโดยการเข้าร่วมภายในโดยแบบสอบถามด้านบน และเรียงลำดับโดยคอลัมน์จากคอลัมน์แรกจากนั้นคอลัมน์จากตารางที่สองโดยแบบสอบถามด้านบน เลือก TOP 1 เท่านั้น (ในสคริปต์ด้านล่างมีบางบรรทัดเพื่อสร้างข้อมูลทดสอบในกรณีที่ช่วยทำให้เกิดปัญหา) -- +++ TABLE SETUP +++ CREATE …


3
ดัชนีหนึ่งหรือสอง
ฉันสร้างดัชนีต่อไปนี้บนตารางในฐานข้อมูลของฉัน: CREATE INDEX [idx_index1] on [table1] (col1, col2, col3) เซิร์ฟเวอร์กำลังแนะนำดัชนี 'ขาดหายไป' ต่อไปนี้: CREATE INDEX [idx_index2] on [table1] (col1, col2) INCLUDE (col3, col4, col5, col6....) ดูเหมือนว่าฉันมีเหตุผลที่จะแก้ไขคำจำกัดความดัชนีที่มีอยู่เพื่อรวมคอลัมน์ที่แนะนำแทนที่จะสร้างดัชนีใหม่ที่ต้องได้รับการบำรุงรักษา แบบสอบถามที่เลือกบน col1 และ col2 สามารถใช้ index1 ได้อย่างมีประสิทธิภาพเท่ากับ index2 ฉันถูกต้องหรือว่าฉันขาดอะไรไป

2
MySQL ไม่ได้ใช้ดัชนีเมื่อเข้าร่วมกับตารางอื่น
ฉันมีสองตารางตารางแรกประกอบด้วยบทความ / บล็อกโพสต์ทั้งหมดภายใน CMS บทความเหล่านี้บางส่วนอาจปรากฏในนิตยสารซึ่งในกรณีนี้พวกเขามีความสัมพันธ์กับต่างประเทศที่สำคัญกับตารางอื่นที่มีข้อมูลเฉพาะของนิตยสาร นี่คือเวอร์ชันที่เรียบง่ายของไวยากรณ์การสร้างตารางสำหรับสองตารางเหล่านี้ที่มีแถวที่ไม่จำเป็นออกมา: CREATE TABLE `base_article` ( `id` int(11) NOT NULL AUTO_INCREMENT, `date_published` datetime DEFAULT NULL, `title` varchar(255) NOT NULL, `description` text, `content` longtext, `is_published` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), KEY `base_article_date_published` (`date_published`), KEY `base_article_is_published` (`is_published`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1; CREATE TABLE `mag_article` ( …

2
วิธีการป้องกันการกระจายตัวของดัชนีรายวัน 99%
ฉันมีตารางคะแนนสูงสุดสำหรับผู้เล่น 100,000 คนที่ถูกแทรกลงในวันละ 2 ครั้งโดยมีหนึ่งระเบียนต่อผู้เล่นหนึ่งคน ในตอนท้ายของวันการกระจายตัวของดัชนีสำหรับดัชนีในตารางนั้นคือ 99% มีวิธีการป้องกันโดยการปรับการตั้งค่า? CREATE TABLE HighScore( [id] [int] IDENTITY(1,1) NOT NULL, [user] [int] NULL, [player] [int] NULL, [round] [tinyint] NULL, [group] [int] NULL, [rank] [int] NULL, [delta] [int] NULL, [roundpoints] [int] NULL, [totalpoints] [int] NULL, PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, …

3
คอลัมน์ที่รวมกับดัชนีที่กรอง
ขณะนี้เราทำงานกับตารางชื่อtb_tranfers ตารางนี้มี 40 ล้านแถวและมีขนาด ~ 26 GB (ข้อมูล 11 GB, ดัชนี 15 GB) 10 ถึง 15% ของแถวเป็นแถวที่ถูกลบแบบอ่อน ( DeletedDateไม่ใช่ค่าว่าง) แอปพลิเคชันใช้เฉพาะแถวที่DeletedDateเป็นโมฆะ แบบสอบถามทั้งหมดในตารางนี้จะมีส่วนคำสั่งที่มีผล มี 15 ดัชนีในตารางนี้ ดัชนี DMV ที่ขาดหายไปมีคำแนะนำในการสร้างดัชนีด้วยDeletedDateเป็นคอลัมน์ที่รวมอยู่ จะเป็นประโยชน์หรือไม่ที่จะใช้ดัชนีที่กรองแล้วในดัชนีWHERE DeleteDdate IS NULLที่ไม่ได้กล่าวถึงทั้ง 11 ดัชนี หรือมันจะดีกว่าที่จะมีคอลัมน์DeletedDateเป็นคอลัมน์ที่รวมหรือไม่

2
ฐานข้อมูลอัปเดตดัชนีในธุรกรรม ณ จุดใด
ฉันพยายามที่จะเข้าใจลำดับของเหตุการณ์ในส่วนแทรกที่ทั้งดัชนีและธุรกรรมเกี่ยวข้องกัน ตัวอย่างเช่นสถานะเอกสารของ Oracle: หากคุณสร้าง [หรือมี] ดัชนีอย่างน้อยหนึ่งรายการก่อนที่จะโหลดข้อมูลฐานข้อมูลจะต้องอัปเดตทุกดัชนีเมื่อแทรกแต่ละแถว แต่จะเกิดอะไรขึ้นถ้าฉันสร้างธุรกรรมแทรกห้าแถวจากนั้นส่งมอบ? มีการอัพเดตดัชนีสำหรับทุกส่วนแทรกหรือเพียงจุดที่กำหนดไว้หรือไม่ ลอจิกบอกฉันว่าพวกเขาจะได้รับการอัปเดต ณ จุดส่งมอบเท่านั้นเนื่องจากดัชนีที่อัพเดตไม่สามารถใช้งานได้จนกว่าจะมีการบันทึกข้อมูลเหล่านั้น แต่นั่นเป็นเรื่องจริงหรือ ถ้าเป็นเช่นนั้นเมื่อฉันมีการแทรก 1m แถวเพื่อประสิทธิภาพที่ดีที่สุดฉันควรทำคอมมิชชันขนาดใหญ่ของแถวทั้งหมดและไม่ใช่ 10 ทรานแซคชันของระเบียน 100k แน่นอนฉันตระหนักว่าความเสี่ยงนี้ย้อนกลับมากขึ้นถ้าแถว 999,999 ล้มเหลว ขอโทษถ้าคำศัพท์ของฉันออกมาเล็กน้อย ฉันไม่ได้เป็น DBA โดยการค้าขาย ฉันไม่ได้สนใจในฐานข้อมูลเฉพาะมากเท่าฐานข้อมูลโดยทั่วไปถึงแม้ว่า Oracle และ Postgres เป็นสิ่งที่ฉันใช้มากที่สุด ฉันค้นหาในหัวข้อนี้ แต่ไม่พบคำตอบที่ชัดเจนจริงๆ

2
ดัชนีแนวทางปฏิบัติที่ดีที่สุดที่ไม่ได้ใช้
จากแบบสอบถามนี้ถ้าฉันเห็นจำนวนการอ่านน้อย (ใกล้เคียงกับ 0 หรือ 0, เช่น 1 หรือ 2) และการอัปเดตผู้ใช้จำนวนมากหรือปานกลาง (ฉันไม่สามารถค้นหาแทรกหรือลบด้วยแบบสอบถามนี้) จำนวนแถวขนาดใหญ่ฉันควรลบดัชนีในทฤษฎี SELECT DISTINCT OBJECT_NAME(s.[object_id]) AS ObjectName , p.rows TableRows , i.name AS [INDEX NAME] , (user_seeks + user_scans + user_lookups) AS TotalReads , user_updates UserUpdates FROM sys.dm_db_index_usage_stats s INNER JOIN sys.indexes i ON i.[object_id] = s.[object_id] AND i.index_id = …

2
วิธีการออกแบบดัชนีสำหรับคอลัมน์ที่มีค่า NULL ใน MySQL
ฉันมีฐานข้อมูลที่มี 40 ล้านรายการและต้องการเรียกใช้แบบสอบถามด้วยWHEREประโยคต่อไปนี้ ... WHERE `POP1` IS NOT NULL && `VT`='ABC' && (`SOURCE`='HOME') && (`alt` RLIKE '^[AaCcGgTt]$') && (`ref` RLIKE '^[AaCcGgTt]$') && (`AA` RLIKE '^[AaCcGgTt]$') && (`ref` = `AA` || `alt` = `AA`) LIMIT 10 ; POP1เป็นคอลัมน์ลอยที่ยังสามารถเป็น NULL POP1 IS NOT NULLควรแยกประมาณ 50% ของรายการนั่นเป็นเหตุผลที่ฉันใส่ไว้ในตอนเริ่มต้น เงื่อนไขอื่น ๆ ทั้งหมดลดจำนวนเพียงเล็กน้อย ในบรรดาคนอื่น ๆ ฉันออกแบบดัชนีpop1_vt_sourceซึ่งดูเหมือนจะไม่ได้ใช้ในขณะที่ใช้ดัชนีที่vtเป็นคอลัมน์แรก …
11 mysql  index 

2
ช้าสั่งซื้อด้วย LIMIT
ฉันมีคำถามนี้: SELECT * FROM location WHERE to_tsvector('simple',unaccent2("city")) @@ to_tsquery('simple',unaccent2('wroclaw')) order by displaycount ฉันมีความสุขกับมัน: "Sort (cost=3842.56..3847.12 rows=1826 width=123) (actual time=1.915..2.084 rows=1307 loops=1)" " Sort Key: displaycount" " Sort Method: quicksort Memory: 206kB" " -> Bitmap Heap Scan on location (cost=34.40..3743.64 rows=1826 width=123) (actual time=0.788..1.208 rows=1307 loops=1)" " Recheck Cond: (to_tsvector('simple'::regconfig, unaccent2((city)::text)) …

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