คำถามติดแท็ก query-performance

สำหรับคำถามเกี่ยวกับการปรับปรุงประสิทธิภาพและ / หรือประสิทธิภาพของการสืบค้นฐานข้อมูล

2
วิธีที่มีประสิทธิภาพมากที่สุดในการรับช่วงวันที่
วิธีที่มีประสิทธิภาพมากที่สุดในการดึงข้อมูลช่วงวันที่ด้วยโครงสร้างตารางเป็นอย่างไร create table SomeDateTable ( id int identity(1, 1) not null, StartDate datetime not null, EndDate datetime not null ) go สมมติว่าคุณต้องการช่วงสำหรับทั้งสองและStartDate EndDateดังนั้นในคำอื่น ๆ ถ้าStartDateตกอยู่ในระหว่าง@StartDateBeginและ@StartDateEndและEndDateตกอยู่ในระหว่าง@EndDateBeginและ@EndDateEndแล้วทำบางสิ่งบางอย่าง ฉันรู้ว่ามีสองสามวิธีที่จะไปเกี่ยวกับเรื่องนี้ แต่สิ่งที่แนะนำมากที่สุดคืออะไร?

2
วิธีเพิ่มความเร็วในการเลือกที่แตกต่างกันอย่างไร
ฉันมีตัวเลือกแบบง่าย ๆ ในข้อมูลอนุกรมเวลา: SELECT DISTINCT user_id FROM events WHERE project_id = 6 AND time > '2015-01-11 8:00:00' AND time < '2015-02-10 8:00:00'; และใช้เวลา 112 วินาที นี่คือแผนแบบสอบถาม: http://explain.depesz.com/s/NTyA แอปพลิเคชันของฉันต้อง preform การดำเนินการที่แตกต่างกันมากมายและนับเช่นนี้ มีวิธีที่เร็วกว่าในการรับข้อมูลประเภทนี้หรือไม่

3
กำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ที่ทำให้ประสิทธิภาพการทำงานช้าลง
ฉันจะกำจัดตัวดำเนินการค้นหาคีย์ (เป็นกลุ่ม) ในแผนปฏิบัติการได้อย่างไร ตารางtblQuotesมีดัชนีแบบคลัสเตอร์ (เปิดQuoteID) และดัชนีที่ไม่ได้คลัสเตอร์27 รายการดังนั้นฉันจึงพยายามไม่สร้างอีกต่อไป ฉันวางคอลัมน์ดัชนีแบบคลัสเตอร์QuoteIDในแบบสอบถามของฉันโดยหวังว่าจะช่วยได้ แต่ก็ยังเหมือนเดิม แผนการดำเนินการที่นี่ หรือดูมัน: นี่คือสิ่งที่ผู้ดำเนินการค้นหาคีย์พูดว่า: ค้นหา: declare @EffDateFrom datetime ='2017-02-01', @EffDateTo datetime ='2017-08-28' SET NOCOUNT ON SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED IF OBJECT_ID('tempdb..#Data') IS NOT NULL DROP TABLE #Data CREATE TABLE #Data ( QuoteID int NOT NULL, --clustered index [EffectiveDate] [datetime] NULL, …

1
SQL Server - ถ้าลอจิกในขั้นตอนการจัดเก็บและแคชแผน
มาตรฐาน SQL Server 2012 และ 2016: ถ้าฉันใส่if-elseลอจิกในโพรซีเดอร์ที่เก็บไว้เพื่อรันโค้ดหนึ่งในสองสาขาขึ้นอยู่กับค่าของพารามิเตอร์เอ็นจินแคชจะเป็นเวอร์ชันล่าสุดหรือไม่? และถ้าในการประมวลผลต่อไปนี้ค่าของพารามิเตอร์จะเปลี่ยนแปลงมันจะทำการคอมไพล์และแคชกระบวนการที่เก็บไว้ใหม่อีกครั้งเนื่องจากจะต้องทำการประมวลผลรหัสสาขาอื่นหรือไม่ (แบบสอบถามนี้ค่อนข้างแพงในการรวบรวม)

1
ข้อความค้นหาย่อยที่มีประสิทธิภาพต่ำและมีการเปรียบเทียบวันที่
เมื่อใช้แบบสอบถามย่อยเพื่อค้นหาจำนวนรวมของระเบียนก่อนหน้าทั้งหมดที่มีเขตข้อมูลที่ตรงกันประสิทธิภาพจะแย่มากในตารางที่มีระเบียนน้อยถึง 50k โดยไม่มีแบบสอบถามย่อยแบบสอบถามดำเนินการในไม่กี่มิลลิวินาที ด้วยแบบสอบถามย่อยเวลาดำเนินการขึ้นไปหนึ่งนาที สำหรับแบบสอบถามนี้ผลลัพธ์จะต้อง: รวมเฉพาะบันทึกเหล่านั้นภายในช่วงวันที่ที่กำหนด รวมการนับของระเบียนก่อนหน้าทั้งหมดไม่รวมระเบียนปัจจุบันโดยไม่คำนึงถึงช่วงวันที่ โครงสร้างตารางพื้นฐาน Activity ====================== Id int Identifier Address varchar(25) ActionDate datetime2 Process varchar(50) -- 7 other columns ตัวอย่างข้อมูล Id Address ActionDate (Time part excluded for simplicity) =========================== 99 000 2017-05-30 98 111 2017-05-30 97 000 2017-05-29 96 000 2017-05-28 95 111 2017-05-19 94 222 …

2
เข้าร่วมการสืบค้นใช้เวลา 11 นาทีเพื่อเรียกใช้บนตาราง 300,000 แถว
แบบสอบถามด้านล่างใช้เวลาในการดำเนินการมากกว่า 11 นาที SELECT `c`.*, `e`.`name` AS `employee_name`, `e`.`emp_no`, `d`.`code` AS `department_code`, IF(ew.code IS NOT NULL, ew.code, egw.code) AS shift_code, IF(ew.code IS NOT NULL, ew.time_in_from, egw.time_in_from) AS time_in_from, IF(ew.code IS NOT NULL, ew.time_out_to, egw.time_out_to) AS time_out_to, IF(ew.code IS NOT NULL, ew.next_day, egw.next_day) AS next_day FROM `tms_emp_badge_card` AS `c` LEFT JOIN …

3
เหตุใดข้อความค้นหา EXISTS ของฉันจึงทำการสแกนดัชนีแทนที่จะค้นหาดัชนี
ฉันกำลังปรับปรุงการค้นหาให้ดีที่สุด สำหรับแบบสอบถามด้านล่าง SET STATISTICS IO ON; DECLARE @OrderStartDate DATETIME2 = '27 feb 2016'; DECLARE @OrderEndDate DATETIME2 = '28 feb 2016'; SELECT o.strBxOrderNo , o.sintOrderStatusID , o.sintOrderChannelID , o.sintOrderTypeID , o.sdtmOrdCreated , o.sintMarketID , o.strOrderKey , o.strOfferCode , o.strCurrencyCode , o.decBCShipFullPrice , o.decBCShipFinal , o.decBCShipTax , o.decBCTotalAmount , o.decWrittenTotalAmount , o.decBCWrittenTotalAmount …

1
sp_cursoropen และขนาน
ฉันพบปัญหาด้านประสิทธิภาพด้วยข้อความค้นหาที่ฉันไม่สามารถเข้าใจได้ ฉันดึงแบบสอบถามออกจากคำจำกัดความของเคอร์เซอร์ แบบสอบถามนี้ใช้เวลาไม่กี่วินาทีในการดำเนินการ SELECT A.JOBTYPE FROM PRODROUTEJOB A WHERE ((A.DATAAREAID=N'IW') AND ((A.CALCTIMEHOURS<>0) AND (A.JOBTYPE<>3))) AND EXISTS (SELECT 'X' FROM PRODROUTE B WHERE ((B.DATAAREAID=N'IW') AND (((((B.PRODID=A.PRODID) AND ((B.PROPERTYID=N'PR1526157') OR (B.PRODID=N'PR1526157'))) AND (B.OPRNUM=A.OPRNUM)) AND (B.OPRPRIORITY=A.OPRPRIORITY)) AND (B.OPRID=N'GRIJZEN'))) AND NOT EXISTS (SELECT 'X' FROM ADUSHOPFLOORROUTE C WHERE ((C.DATAAREAID=N'IW') AND ((((((C.WRKCTRID=A.WRKCTRID) AND (C.PRODID=B.PRODID)) AND …

3
ดัชนีสำหรับเคียวรี SQL ที่มีเงื่อนไข WHERE และ GROUP BY
ฉันพยายามที่จะกำหนดดัชนีที่จะใช้สำหรับแบบสอบถาม SQL ที่มีWHEREเงื่อนไขและGROUP BYที่กำลังทำงานช้ามาก คำค้นหาของฉัน: SELECT group_id FROM counter WHERE ts between timestamp '2014-03-02 00:00:00.0' and timestamp '2014-03-05 12:00:00.0' GROUP BY group_id ปัจจุบันตารางมี 32.000.000 แถว เวลาดำเนินการของแบบสอบถามเพิ่มขึ้นมากเมื่อฉันเพิ่มกรอบเวลา ตารางที่สงสัยจะเป็นดังนี้: CREATE TABLE counter ( id bigserial PRIMARY KEY , ts timestamp NOT NULL , group_id bigint NOT NULL ); ขณะนี้ฉันมีดัชนีต่อไปนี้ แต่ประสิทธิภาพยังคงช้า: CREATE INDEX …

1
SQL Server รู้ว่าภาคแสดงมีความสัมพันธ์กันอย่างไร
ในขณะที่การวิเคราะห์แบบสอบถาม SQL Server 2008 R2 ด้วยการประมาณค่า cardinality ที่ไม่ดี (แม้จะมีการทำดัชนีอย่างง่ายสถิติที่ทันสมัย ​​ฯลฯ ) และด้วยเหตุนี้แผนการสืบค้นที่ไม่ดีฉันพบบทความ KB ที่เกี่ยวข้องบางที: การ แก้ไข: ประสิทธิภาพแย่เมื่อคุณเรียกใช้แบบสอบถาม ที่ประกอบด้วยสหสัมพันธ์และเพรดิเคตใน SQL Server 2008 หรือใน SQL Server 2008 R2 หรือใน SQL Server 2012 ฉันสามารถเดาได้ว่าบทความ KB หมายถึงอะไรโดย "มีความสัมพันธ์" เช่นภาคแสดงข้อ 2 และภาคส่วน # 1 ส่วนใหญ่กำหนดเป้าหมายไปที่แถวเดียวกัน แต่ฉันไม่รู้ว่า SQL Server รู้เกี่ยวกับสหสัมพันธ์เหล่านี้อย่างไร ตารางต้องการดัชนีหลายคอลัมน์ที่มีคอลัมน์จากเพรดิเคตทั้งสองหรือไม่ SQL ใช้สถิติเพื่อตรวจสอบว่าค่าจากคอลัมน์หนึ่งมีความสัมพันธ์กับอีกคอลัมน์หนึ่งหรือไม่? หรือมีวิธีอื่นที่ใช้? ฉันขอสิ่งนี้ด้วยสองเหตุผล: เพื่อกำหนดว่าตารางและแบบสอบถามใดของฉันอาจได้รับการปรับปรุงโดยใช้โปรแกรมแก้ไขด่วนนี้ …

5
วิธีเพิ่มประสิทธิภาพ SELECT ช้ามากด้วย LEFT JOIN บนตารางขนาดใหญ่
ฉัน googling ให้การศึกษาด้วยตนเอง & กำลังมองหาวิธีแก้ปัญหาเป็นเวลาหลายชั่วโมง แต่ไม่มีโชค ฉันพบคำถามที่คล้ายกันสองสามข้อที่นี่ แต่ไม่ใช่กรณีนี้ ตารางของฉัน: คน (ประมาณ 10M แถว) แอตทริบิวต์ (สถานที่, อายุ, ... ) ลิงก์ (M: M) ระหว่างบุคคลและแอตทริบิวต์ (ประมาณ 40M แถว) ดัมพ์เต็ม ~ 280MB สถานการณ์: ฉันพยายามเลือกรหัสบุคคลทั้งหมด ( person_id) จากบางสถานที่ ( location.attribute_value BETWEEN 3000 AND 7000) เป็นเพศ ( gender.attribute_value = 1) เกิดในบางปี ( bornyear.attribute_value BETWEEN 1980 AND …

2
วิธีติดตามการบล็อกที่เกิดขึ้นน้อยกว่าหนึ่งวินาที - SQL Server
ฉันกำลังพยายามแก้ไขปัญหาการบล็อกซึ่งเกิดขึ้นน้อยกว่าหนึ่งวินาที แอปพลิเคชัน OLTP นั้นมีความละเอียดอ่อนมากและต้องมีเวลาตอบสนองน้อยกว่า 200ms สำหรับการทำธุรกรรมบางอย่างตาม SLA ที่ตกลงกันไว้ เรามีปัญหาการเพิ่มระดับการล็อคด้วยการเปิดตัวรหัสใหม่ซึ่งเราสามารถแก้ไขได้ด้วยการลดขนาดแบทช์ในการอัปเดต แม้ว่าจะมีขนาดเล็ก แต่เราสงสัยว่า sp ใหม่บล็อกแถวเดียวกันกับที่ธุรกรรม OLTP กำลังอัปเดต ฉันต้องการค้นหาเซสชันที่กำลังถูกบล็อกและทรัพยากรกำลังรออยู่ ตามความเข้าใจของฉัน "เกณฑ์กระบวนการที่ถูกบล็อก" สามารถตั้งค่าได้อย่างน้อย 1 วินาทีและดังนั้นสิ่งนี้จะไม่จับการบล็อก ฉันกำลังทดลองกับ wait_info และ wait_completed x events มีวิธีอื่นที่เราสามารถติดตามสิ่งนี้ได้หรือไม่ ขอบคุณ

2
มาตราส่วน PostgreSQL TRIGGER
Postgres กระตุ้นกลไกการปรับขนาดอย่างไร เรามีการติดตั้ง PostgreSQL ขนาดใหญ่และเราพยายามที่จะใช้ระบบที่อิงเหตุการณ์โดยใช้ตารางบันทึกและ TRIGGER โดยทั่วไปเราต้องการสร้าง TRIGGER สำหรับแต่ละตารางที่เราต้องการรับการแจ้งเตือนสำหรับการดำเนินการ UPDATE / INSERT / DELETE เมื่อทริกเกอร์นี้เริ่มทำงานมันจะเรียกใช้ฟังก์ชั่นที่จะเพิ่มแถวใหม่ (เข้ารหัสเหตุการณ์) ลงในตารางบันทึกที่เราจะสำรวจจากบริการภายนอก ก่อนที่จะเข้าร่วมกับ Postgres TRIGGER (s) เราต้องการทราบวิธีการปรับขนาด: เราสามารถสร้างทริกเกอร์จำนวนเท่าใดในการติดตั้ง Postgres เดียว ส่งผลกระทบต่อประสิทธิภาพการค้นหาหรือไม่ ใครเคยลองสิ่งนี้บ้างไหม?

1
ไม่ควรหลีกเลี่ยงใน
ในบรรดานักพัฒนา SQL Server บางคนเป็นความเชื่อที่ถือกันอย่างกว้างขวางว่าNOT INช้ามากและควรเขียนคำสั่งใหม่เพื่อให้ผลลัพธ์เหมือนเดิม แต่ไม่ใช้คำหลัก "ความชั่วร้าย" ( ตัวอย่าง ) มีความจริงใด ๆ หรือไม่? ตัวอย่างเช่นมีข้อบกพร่องบางอย่างที่รู้จักใน SQL Server (เวอร์ชันใด) ที่ทำให้การสืบค้นที่ใช้NOT INมีแผนการดำเนินการที่เลวร้ายยิ่งกว่าแบบสอบถามที่เทียบเท่าที่ใช้ LEFT JOINรวมกับNULLการตรวจสอบหรือ (SELECT COUNT(*) ...) = 0ในWHEREข้อ?

3
ปรับปรุงประสิทธิภาพของการสืบค้นโดยใช้ IN ()
ฉันมีแบบสอบถาม SQL ต่อไปนี้: SELECT Event.ID, Event.IATA, Device.Name, EventType.Description, Event.Data1, Event.Data2 Event.PLCTimeStamp, Event.EventTypeID FROM Event INNER JOIN EventType ON EventType.ID = Event.EventTypeID INNER JOIN Device ON Device.ID = Event.DeviceID WHERE Event.EventTypeID IN (3, 30, 40, 41, 42, 46, 49, 50) AND Event.PLCTimeStamp BETWEEN '2011-01-28' AND '2011-01-29' AND Event.IATA LIKE '%0005836217%' ORDER …

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