ฉันใช้ MS SQL และฉันต้องเรียกใช้แบบสอบถามหลายรายการในตารางเดียวกันในเกณฑ์ที่แตกต่างกัน ตอนแรกฉันเรียกใช้แบบสอบถามแต่ละรายการในตารางเดิมแม้ว่าพวกเขาทั้งหมดแชร์การกรองบางอย่าง (เช่นวันที่สถานะ) การดำเนินการนี้ใช้เวลานาน (ประมาณ 2 นาที)
มีข้อมูลที่ซ้ำกันในแถวข้อมูลและดัชนีทั้งหมดไม่ได้เป็นคลัสเตอร์ ฉันสนใจเฉพาะคอลัมน์ 4 คอลัมน์สำหรับเกณฑ์ของฉันและผลลัพธ์ควรให้ผลลัพธ์การนับเท่านั้นสำหรับการค้นหาทั้งหมด
คอลัมน์ที่ต้องการ: TABLE
, FIELD
, AFTER
, DATE
และมีดัชนีในแต่ละและDATE
TABLE
หลังจากสร้างตารางชั่วคราวที่มีเฉพาะฟิลด์ที่ฉันต้องการมันลงไปเป็นเวลา 1:40 นาทีซึ่งยังแย่มาก
CREATE TABLE #TEMP
(
TABLE VARCHAR(30) NULL,
FIELD VARCHAR(30) NULL,
AFTER VARCHAR(1000) NULL,
DATE DATETIME,
SORT_ID INT IDENTITY(1,1)
)
CREATE CLUSTERED INDEX IX_ADT ON #TEMP(SORT_ID)
INSERT INTO #TEMP (TABLE, FIELD, AFTER, DATE)
SELECT TABLE, FIELD, AFTER, DATE
FROM mytbl WITH (NOLOCK)
WHERE TABLE = 'OTB' AND
FIELD = 'STATUS'
เรียกใช้สิ่งนี้ -> (216598 แถวที่ได้รับผลกระทบ)
เนื่องจากข้อความค้นหาทั้งหมดไม่ขึ้นอยู่กับช่วงวันที่ฉันจึงไม่รวมอยู่ในแบบสอบถาม ปัญหาก็คือว่ามันพากันดังกล่าวข้างต้น 1 นาทีเพื่อแทรกเท่านั้น เม็ดมีดด้านบนใช้เวลา1:19 นาที
ฉันต้องการเรียกใช้บางสิ่งเช่นนี้สำหรับข้อความค้นหาหลายรายการ
SELECT COUNT(*) AS COUNT
FROM #TEMP
WHERE AFTER = 'R' AND
DATE >= '2014-01-01' AND
DATE <= '2015-01-01'
มันเป็นปัญหาของการแทรกมากกว่าที่เลือก แต่อุณหภูมิมีวิธีแถวน้อยกว่าตารางเดิมซึ่งอาจจะดีกว่าที่จะผ่านตารางหลาย ๆ ครั้ง
ฉันจะเพิ่มประสิทธิภาพสิ่งนี้ได้อย่างไร
แก้ไข
ฉันได้ลบรหัสการเรียงลำดับแล้วฉันคิดว่าปัญหาส่วนใหญ่เป็นการเลือกและไม่แทรก มันเป็นการเดา
ฉันไม่สามารถสร้างเอกลักษณ์ในดัชนีใด ๆ เนื่องจากไม่มีเขตข้อมูลหรือแถวที่ไม่ซ้ำกัน
ฉันใช้ SQL Server 2012
ข้อมูลตาราง : มันเป็นกองและมีการใช้พื้นที่ดังต่อไปนี้:
name rows reserved data index_size unused
mytbl 24869658 9204568 KB 3017952 KB 5816232 KB 370384 KB
SELECT COUNT(*) AS COUNT FROM original_table WHERE AFTER = 'R' AND DATE >= '2014-01-01' AND DATE < '2015-01-01'
ทำไมคุณไม่ลองปรับแต่ละข้อ (แบบสอบถาม) แยกต่างหาก คุณไม่ได้รับอนุญาตให้เพิ่มดัชนีในตารางหรือไม่?
TABLE
และFIELD
คอลัมน์จาก#temp
ตาราง (แถวทั้งหมดมีTABLE = 'OTB' AND FIELD = 'STATUS'
ไว้สำหรับตารางอุณหภูมิเฉพาะหลังจากทั้งหมด)
CREATE TABLE
คำสั่ง) การลงคะแนนเสียงเป็นเพราะคำถามไม่ชัดเจน