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

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

5
การสแกนแม้ว่าฉันคาดหวังการค้นหา
ฉันต้องการเพิ่มประสิทธิภาพของSELECTคำสั่ง แต่ SQL Server จะทำการสแกนดัชนีแทนการค้นหา นี่คือแบบสอบถามที่แน่นอนอยู่ในขั้นตอนการจัดเก็บ: CREATE PROCEDURE dbo.something @Status INT = NULL, @IsUserGotAnActiveDirectoryUser BIT = NULL AS SELECT [IdNumber], [Code], [Status], [Sex], [FirstName], [LastName], [Profession], [BirthDate], [HireDate], [ActiveDirectoryUser] FROM Employee WHERE (@Status IS NULL OR [Status] = @Status) AND ( @IsUserGotAnActiveDirectoryUser IS NULL OR ( @IsUserGotAnActiveDirectoryUser IS NOT NULL …

1
วิธีเรียกคืนพื้นที่ที่ใช้โดยดัชนีที่สร้างขึ้นบางส่วนและถูกยกเลิกโดยไฟฟ้าดับ
ฉันใช้ postgres (postgis) 9.4.2 บน mac (10.10.4) ฉันมีตารางใหญ่สองสามอัน (หลาย TB) ในระหว่างการสร้างดัชนีของหนึ่งในนั้นที่ใช้เวลาประมาณหนึ่งสัปดาห์ฉันดูการลดลงของพื้นที่ HD ที่มีอยู่ตามที่คุณคาดว่าจะถึงจุดที่ดัชนีจะเสร็จสิ้นเมื่อไฟฟ้าดับนานกว่าแบตเตอรี่และระบบ ลงไป. ฉันปิดบัฟเฟอร์และfillfactor=100ระหว่างการสร้างเนื่องจากเป็นแหล่งข้อมูลแบบคงที่ ในการรีบู๊ตพื้นที่ที่เหลืออยู่บนไดรฟ์จะอยู่ในตำแหน่งที่ใกล้ถึงจุดสิ้นสุดของการสร้างดัชนี การวิเคราะห์สูญญากาศไม่เพิ่มพื้นที่ว่าง ฉันลองวางโต๊ะแล้วนำเข้าไปใหม่และนั่นก็ไม่ได้ทำให้เนื้อที่ลดลง ตอนนี้ฉันอยู่ในสถานที่ที่ฉันมีพื้นที่ไม่เพียงพอที่จะสร้างดัชนี ไฟล์ถูกสร้างขึ้นในระหว่างการสร้างดัชนีติดอยู่ในบริเวณขอบรกบางส่วนที่ไม่สามารถลบออกได้โดยระบบเนื่องจากวิธีการที่เครื่องหยุดทำงานในระหว่างไฟฟ้าดับหรือไม่? เมื่อฉันมองไปที่ตารางขนาด + ดัชนีในฐานข้อมูล (ซึ่งเป็นเพียงข้อมูลในไดรฟ์นั้น) พวกเขาเพิ่มขึ้นประมาณ6TB ไดรฟ์คือ8TBและเหลือน้อยกว่า500GBบนไดรฟ์ดังนั้นดูเหมือนว่าจะมีประมาณ 1.5TB ที่หายไปที่ไหนสักแห่งซึ่งมีขนาดเท่ากับดัชนีที่น่าจะเป็น ความคิดใด ๆ

3
Postgres ทำการสแกนตามลำดับแทนการสแกนดัชนี
ฉันมีตารางที่มีประมาณ 10 ล้านแถวในนั้นและดัชนีในเขตข้อมูลวันที่ เมื่อฉันลองและแยกค่าที่ไม่ซ้ำกันของเขตข้อมูลที่จัดทำดัชนี Postgres เรียกใช้การสแกนตามลำดับแม้ว่าชุดผลลัพธ์มีเพียง 26 รายการ เหตุใดเครื่องมือเพิ่มประสิทธิภาพจึงเลือกแผนนี้ และฉันจะหลีกเลี่ยงได้อย่างไร จากคำตอบอื่น ๆ ฉันสงสัยว่านี่เกี่ยวข้องกับแบบสอบถามมากเท่ากับดัชนี explain select "labelDate" from pages group by "labelDate"; QUERY PLAN ----------------------------------------------------------------------- HashAggregate (cost=524616.78..524617.04 rows=26 width=4) Group Key: "labelDate" -> Seq Scan on pages (cost=0.00..499082.42 rows=10213742 width=4) (3 rows) โครงสร้างตาราง: http=# \d pages Table "public.pages" Column | Type …

2
MySQL: ลบ…ใน .. ใน () เทียบกับลบ .. จาก .. เข้าร่วมและล็อคตารางเมื่อลบด้วยการเลือกย่อย
คำเตือน: โปรดแก้ตัวความรู้ของฉันเกี่ยวกับฐานข้อมูลภายใน นี่มันไป: เราเรียกใช้แอปพลิเคชั่น (ไม่ได้เขียนโดยเรา) ซึ่งมีปัญหาประสิทธิภาพการทำงานใหญ่ในงานล้างข้อมูลเป็นระยะในฐานข้อมูล แบบสอบถามมีลักษณะดังนี้: delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); ตรงไปตรงมา SQL ที่อ่านง่ายและมาตรฐาน แต่น่าเสียดายที่ช้ามาก การอธิบายเคียวรีแสดงว่าไม่ได้ใช้ดัชนีที่VARIABLE_SUBSTITUTION.BUILDRESULTSUMMARY_IDมีอยู่: mysql> explain delete from VARIABLE_SUBSTITUTION where BUILDRESULTSUMMARY_ID in ( -> select BUILDRESULTSUMMARY_ID from BUILDRESULTSUMMARY -> where BUILDRESULTSUMMARY.BUILD_KEY = "BAM-1"); | id | select_type …

3
มีข้อดีที่จะไม่แบ่งพาร์ติชันให้สอดคล้องกับดัชนีหรือไม่?
ฉันมีสิทธิ์จัดการตาราง OLAP ที่แบ่งพาร์ติชันขนาดใหญ่ ในขณะที่ตรวจสอบตารางนี้ฉันสังเกตเห็นว่าดัชนีตัวใดตัวหนึ่งไม่ตรงกับชุดรูปแบบการแบ่งพาร์ติชัน เนื่องจากผู้เขียนไม่พร้อมใช้งานและการค้นหาของ Google ที่สร้างขึ้นอย่างระมัดระวังจึงไม่ส่งคืนผลลัพธ์ที่เป็นประโยชน์ใด ๆ ฉันไม่แน่ใจว่าสิ่งนี้เป็นไปโดยเจตนาหรือไม่ตั้งใจ มีเหตุผลใดที่จะไม่จัดพาร์ติชันดัชนีใน SQL Server 2008?

2
การแทรกหลายแถวเทียบกับการแทรกแถวเดี่ยวหลายครั้ง
ในแอพของฉันฉันจะแทรกหลายแถวเมื่อฉันทำได้เพราะมันช่วยลดจำนวนรอบการเดินทางระหว่างฐานข้อมูลและแอป อย่างไรก็ตามฉันอยากรู้อยากเห็นมีข้อดีอื่น ๆ อีกไหม? ตัวอย่างเช่นหากมีการแทรกหลายแถวพร้อมกันเช่นนี้ insert into tbl (c1, c2) values (v1, v2) (v3, v4) เมื่อเทียบกับ: insert into tbl (c1, c2) values (v1, v2) insert into tbl (c1, c2) values (v3, v4) และตารางมีดัชนีดัชนีคำนวณหนึ่งครั้งในกรณีแรกและสองครั้งในกรณีที่สองหรือไม่ หรือมันมักจะใส่ครั้งเดียวต่อ? สมมติว่าแบบสอบถามทั้งสองอยู่ในธุรกรรมเดียวกัน ฉันใช้ PostgreSQL

1
ความไม่เหมาะสมของการใช้ STATISTICS_NORECOMPUTE
เมื่อไม่นานมานี้ฉันได้มีส่วนร่วมในการบำรุงรักษาชุดฐานข้อมูลที่มีปัญหาดัชนีที่น่าสนใจ หนึ่งในสิ่งที่ทำให้ฉันแย่ที่สุดคือความแตกต่างของดัชนีระหว่างการพัฒนาการทดสอบแบบจำลองและเครื่องจักรการผลิต เนื่องจากความแตกต่างทำให้การปรับแต่งแบบสอบถามค่อนข้างยากที่จะทำการซิงค์เป็นหนึ่งในโครงการแรกของฉัน ในขณะที่ฉันได้เปรียบเทียบสภาพแวดล้อมการทดสอบและแบบจำลองฉันได้สังเกตเห็นว่าดัชนีส่วนใหญ่ในสภาพแวดล้อมแบบจำลองได้STATISTICS_NORECOMPUTEตั้งค่าไว้ONในขณะที่ไม่ได้ทำการทดสอบ ในสภาพแวดล้อมทั้งหมดมีงานยามค่ำคืนที่อัพเดตสถิติของฐานข้อมูลทั้งหมด ฉันไม่เคยจัดการSTATISTICS_NORECOMPUTEมาก่อนดังนั้นนี่คือคำถามของฉัน มีแนวทางปฏิบัติที่ดีที่สุดเมื่อจัดการกับการตั้งค่านี้หรือไม่? หากฉันกำลังอัปเดตสถิติในตอนท้ายของวันดีที่สุดที่จะเปิดSTATISTICS_NORECOMPUTEในทุกสภาพแวดล้อมของดัชนีทั้งหมดหรือไม่ หรือมีเหตุผลที่ดีที่จะไม่? แก้ไข: ฉันได้พบหนึ่งในบล็อกของ Kimberly Tripp ในหัวข้อที่นี่ซึ่งดูเหมือนว่าจะแนะนำว่าSTATISTICS_NORECOMPUTEควรใช้อย่างประหยัดที่สุด แต่ฉันยังคงกังวลเกี่ยวกับการปิดการใช้งานทั่วโลก มีใครลองบ้างและพวกเขามีประสบการณ์อย่างไรบ้าง

1
ปรับปรุงความเร็วของการสร้างดัชนีใหม่บนเซิร์ฟเวอร์ SQL
ฉันกำลังนำเข้าข้อมูลจำนวนมากไปยังฐานข้อมูลว่างเปล่าและก่อนที่ฉันจะเริ่มฉันจะปิดการใช้งานดัชนีที่ไม่ใช่แบบคลัสเตอร์ที่ไม่ซ้ำกันทั้งหมดเพื่อดูว่าฉันสามารถปรับปรุงประสิทธิภาพของการนำเข้าได้หรือไม่ ตอนนี้ฉันต้องการเปิดใช้งานดัชนีอีกครั้งและฉันสงสัยว่ามีสิ่งใดบ้างที่ฉันสามารถทำได้เพื่อปรับให้เหมาะสมนี้ มีตารางมากกว่า 100 ตารางและดัชนีเกือบ 2,000 รายการที่จะสร้างใหม่ ฐานข้อมูลมีขนาด 200GB ส่วนสำคัญของสคริปต์ที่ฉันใช้คือ: declare c_toggle_index cursor FORWARD_ONLY READ_ONLY for select 'alter index ' + QUOTENAME(i.name) + ' on ' + o.name + ' rebuild' from sys.indexes as i Inner Join sys.objects o On o.object_id = i.object_id Where o.is_ms_shipped = 0 And i.index_id >= …

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

1
มีเหตุผลใดที่จะใช้ดัชนีสำหรับตารางที่เล็กมาก (มากถึง 1,000 แถว)?
ในระหว่างการพัฒนาแอพพลิเคชั่นฉันมีตารางจำนวนมากที่เก็บข้อมูล "เล็ก" จำนวนมาก (โดยปกติแล้วจะมีค่า 10-40 ค่าid+ valueและบางครั้งtype) ซึ่งเก็บแอตทริบิวต์สำหรับ "วัตถุ" เช่นสด / เน่าแดง / เขียว / น้ำเงินสำหรับผลิตภัณฑ์ ฉันไม่ได้ใส่คุณสมบัตินี้ไว้ในตารางผลิตภัณฑ์เนื่องจากส่วนประกอบอิเล็กทรอนิกส์ไม่สามารถสดใหม่และก๊าซออกซิเจนไม่สามารถเป็นสีแดงและตารางไม่สามารถนับแถวได้ไม่ จำกัด ... สำหรับการจัดเก็บคุณสมบัติฉันใช้ตารางขนาดเล็กที่กำหนดเองที่ฟิลด์ 2-3: idสำหรับการเชื่อมโยงnameเพื่อแสดงในแอปพลิเคชันและบางครั้งtypeถ้ากลุ่มคุณลักษณะในประเภทเดียวกัน "ออบเจ็กต์" หลักเชื่อมโยงกับแอตทริบิวต์ผ่านตารางหลายต่อหลายกลาง มีเหตุผลในการสร้างและรักษาดัชนีสำหรับ "พจนานุกรมขนาดเล็ก" เหล่านั้นที่มีน้อยกว่า 1,000 รายการ (ปกติคือ 10-40) หรือไม่ ฐานข้อมูลเป้าหมายของฉันคือ Oracle แต่ฉันหวังว่าจะตอบผู้ขายอิสระ ... ฉันเติม - ไม่ แต่ไม่มีทักษะทางเทคนิคในการปรับความเหมาะสมของฉัน ...

5
กรองชุดใหญ่อย่างมีประสิทธิภาพด้วยการแยก
สมมติว่าฉันมีตารางเดียว CREATE TABLE Ticket ( TicketId int NOT NULL, InsertDateTime datetime NOT NULL, SiteId int NOT NULL, StatusId tinyint NOT NULL, AssignedId int NULL, ReportedById int NOT NULL, CategoryId int NULL ); ในตัวอย่างนี้TicketIdคือคีย์หลัก ฉันต้องการให้ผู้ใช้งานสามารถสร้างข้อความค้นหา "เฉพาะกิจบางส่วน" ได้จากตารางนี้ ฉันพูดบางส่วนเพราะบางส่วนของแบบสอบถามจะได้รับการแก้ไขเสมอ: แบบสอบถามจะเสมอทำการกรองช่วงบน InsertDateTime แบบสอบถามจะเสมอ ORDER BY InsertDateTime DESC แบบสอบถามจะหน้าผลลัพธ์ ผู้ใช้สามารถเลือกที่จะกรองคอลัมน์อื่นใดก็ได้ พวกเขาสามารถกรองไม่มีใครคนหนึ่งหรือหลายคน และสำหรับแต่ละคอลัมน์ผู้ใช้อาจเลือกจากชุดของค่าที่จะนำไปใช้เป็นความแตกแยก ตัวอย่างเช่น: SELECT …

2
ณ จุดใดการมีดัชนีมีประสิทธิภาพ
ฉันพบทรัพยากรจำนวนมากที่กล่าวถึงว่าการเพิ่มดัชนีในตารางทำให้การค้นหาเร็วขึ้นและแทรกช้าลง แต่เฉพาะในกรณีที่ตารางมีขนาดใหญ่ สิ่งนี้สร้างการแลกเปลี่ยนซึ่งเป็นการตัดสินใจออกแบบ แต่ควรมีขนาดตารางโดยประมาณก่อนที่การใช้ดัชนีจะไร้สาระ (ตัวอย่างเช่น 10 แถวอาจเป็นวิธีที่ต่ำกว่าขีด จำกัด นั้น) มีใครรู้บ้างไหมว่าข้อ จำกัด นี้จะอยู่ที่ใดหรือรู้ถึงทรัพยากรที่ชี้ให้ฉันไปในทิศทางที่ถูกต้องหรือไม่?

1
MySQL INNODB เกิดความเสียหายหลังจากเซิร์ฟเวอร์ขัดข้องระหว่างคำสั่ง truncate
เซิร์ฟเวอร์ของฉันทำงานล้มเหลววันนี้ฉันคิดว่าเนื่องจากคำสั่งตัดทอนตารางพร้อมกันบนหนึ่งในตาราง INNODB ของเรา เซิร์ฟเวอร์สามารถเริ่มต้นใหม่ได้ แต่หลังจากเริ่มทำงานทุกครั้งที่ฉันพยายามออกคำสั่ง SQL ฉันได้รับข้อผิดพลาดต่อไปนี้: ERROR 2006 (HY000): MySQL server has gone away นี่คือสิ่งที่เกิดขึ้นในบันทึก: 121206 01:11:12 mysqld restarted 121206 1:11:13 InnoDB: Started; log sequence number 275 559321759 InnoDB: !!! innodb_force_recovery is set to 1 !!! 121206 1:11:13 [Note] /usr/libexec/mysqld: ready for connections. Version: '5.0.95-log' socket: '/var/lib/mysql/mysql.sock' port: 3306 …

2
SQL Server เลือกคีย์ดัชนีสำหรับการอ้างอิงคีย์ต่างประเทศอย่างไร
ฉันทำงานกับฐานข้อมูลดั้งเดิมที่นำเข้าจาก MS Access มีตารางประมาณยี่สิบตารางที่มีคีย์หลักที่ไม่ซ้ำกันและไม่ซ้ำกันซึ่งสร้างขึ้นในระหว่างการเข้าถึง MS> SQL Server อัพเกรด ตารางเหล่านี้จำนวนมากยังมีดัชนีที่ไม่ซ้ำกันและไม่ทำคลัสเตอร์ซึ่งซ้ำกันของคีย์หลัก ฉันพยายามทำความสะอาด แต่สิ่งที่ฉันได้พบคือหลังจากที่ฉันสร้างคีย์หลักใหม่เป็นดัชนีคลัสเตอร์จากนั้นพยายามสร้างคีย์ต่างประเทศคีย์ต่างประเทศคือการอ้างอิงดัชนีเก่าที่ซ้ำกัน (ซึ่งไม่ซ้ำกัน) ฉันรู้สิ่งนี้เพราะมันจะไม่ให้ฉันปล่อยดัชนีที่ซ้ำกัน ฉันคิดว่า SQL Server จะเลือกคีย์หลักเสมอหากมีอยู่ SQL Server มีวิธีเลือกระหว่างดัชนีที่ไม่ซ้ำกันและคีย์หลักหรือไม่ ในการทำซ้ำปัญหา (บน SQL Server 2008 R2): IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Child') DROP TABLE Child GO IF EXISTS (SELECT * FROM sys.tables WHERE name = 'Parent') …

1
ทำไมปัจจัยการเติมใน SQL Server เริ่มต้นที่ 0 (100%)
ฉันเข้าใจปัจจัยการเติมหน้าและโครงสร้างดัชนีและฉันเข้าใจว่าทำไมปัจจัยการเติมเต็ม 100% จึงเป็นแนวปฏิบัติที่ดีที่สุดที่หายาก เหตุใดจึงใช้ค่าเริ่มต้นเป็น 0 (หรือ 100%) เป็นค่าเริ่มต้น ทำไมไม่ 90 หรือ 95 มีบางอย่างที่ฉันขาดหายไปหรือไม่?

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