यदि मेरे पास नीचे दिए गए कथन की तरह एक चुनिंदा कथन है, तो इंडेक्स में कौन सा ऑर्डर और कॉलम शामिल किया जाना चाहिए?इंडेक्स कॉलम और ऑर्डर
SELECT MIN(BenchmarkID),
MIN(BenchmarkDateTime),
Currency1,
Currency2,
BenchmarkType
FROM Benchmark
INNER JOIN MyCurrencyPairs ON Currency1 = Pair1
AND Currency2 = Pair2
WHERE BenchmarkDateTime > IN_BeginningTime
GROUP BY Currency1, Currency2, BenchmarkType;
आइटम गौर करने योग्य
- बेंचमार्क तालिका पंक्तियों के अरबों होगा
- MyCurrencyPairs तालिका एक स्थानीय तालिका कम से कम 10 रिकॉर्ड होगा कि है
- IN_BeginningTime एक इनपुट पैरामीटर है
- कॉलम मुद्रा 1 और मुद्रा 2 VARCHARs
- कॉलम बेंचमार्क आईडी और बेंचमार्क टाइप हैं INTs
- कॉलम BenchmarkDateTime एक datetime (उम्मीद है कि स्पष्ट था)
मैं CURRENCY1, Currency2, BenchmarkType, BenchmarkDateTime, और BenchmarkID साथ एक सूचकांक बना लिया है, लेकिन मैं गति मैं चाहता था नहीं मिल रहा था। क्या मैं एक बेहतर सूचकांक बना सकता हूं?
संपादित करें # 1: किसी ने नीचे दिए गए समझाए गए परिणामों का अनुरोध किया। मुझे पता है अगर कुछ और
# संपादित 2 की जरूरत है चलो: किसी DDL का अनुरोध किया (मैं इस बयान बनाने है संभालने हूँ) दो तालिकाओं के लिए:
(इस बेंचमार्क तालिका डेटाबेस में मौजूद है)
CREATE TABLE `benchmark` (
`SequenceNumber` INT(11) NOT NULL,
`BenchmarkType` TINYINT(3) UNSIGNED NOT NULL,
`BenchmarkDateTime` DATETIME NOT NULL,
`Identifier` CHAR(6) NOT NULL,
`Currency1` CHAR(3) NULL DEFAULT NULL,
`Currency2` CHAR(3) NULL DEFAULT NULL,
`AvgBMBid` DECIMAL(18,9) NOT NULL,
`AvgBMOffer` DECIMAL(18,9) NOT NULL,
`AvgBMMid` DECIMAL(18,9) NOT NULL,
`MedianBMBid` DECIMAL(18,9) NOT NULL,
`MedianBMOffer` DECIMAL(18,9) NOT NULL,
`OpenBMBid` DECIMAL(18,9) NOT NULL,
`ClosingBMBid` DECIMAL(18,9) NOT NULL,
`ClosingBMOffer` DECIMAL(18,9) NOT NULL,
`ClosingBMMid` DECIMAL(18,9) NOT NULL,
`LowBMBid` DECIMAL(18,9) NOT NULL,
`HighBMOffer` DECIMAL(18,9) NOT NULL,
`BMRange` DECIMAL(18,9) NOT NULL,
`BenchmarkId` INT(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`BenchmarkId`),
INDEX `NextBenchmarkIndex01` (`Currency1`, `Currency2`, `BenchmarkType`),
INDEX `NextBenchmarkIndex02` (`BenchmarkDateTime`, `Currency1`, `Currency2`, `BenchmarkType`, `BenchmarkId`),
INDEX `BenchmarkOptimization` (`BenchmarkType`, `BenchmarkDateTime`, `Currency1`, `Currency2`)
)
(मैं अपने दिनचर्या में MyCurrencyPairs तालिका बना रहा हूं)
CREATE TEMPORARY TABLE MyCurrencyPairs
(
Pair1 VARCHAR(50),
Pair2 VARCHAR(50)
) ENGINE=memory;
CREATE INDEX IDX_MyCurrencyPairs ON MyCurrencyPairs (Pair1, Pair2);
क्या आप एक एक्सप्लान <चयन विवरण यहां चला सकते हैं> और परिणाम पोस्ट कर सकते हैं। – FreudianSlip
व्याख्या के लिए धन्यवाद। मुद्रा 1 और 2 फ़ील्ड, क्या वे एक कारण के लिए वर्चर हैं? यानी पाठ है? यदि हां, तो क्या कोई तरीका है कि आप उन्हें लुकअप में परिवर्तित कर सकते हैं ताकि फील्ड प्रकार को आईएनटी में बदला जा सके? यानी "जीबीपी" => 1, "यूएसडी" => 2 – FreudianSlip
दुख की बात नहीं ... यह एक ऐसी प्रणाली है जो यहां थोड़ी देर रही है और यह एक बड़ा बदलाव होगा। मेरी इच्छा है कि मूल वास्तुकार ने ऐसा किया था ... कोई विचार नहीं कि आप VARCHARs पर सबकुछ मिलान करने का प्रयास क्यों करेंगे ..... – Miles