VARCHAR
. पर कुंजियां कॉलम बहुत लंबे हो सकते हैं जिसके परिणामस्वरूप प्रति पृष्ठ कम रिकॉर्ड और अधिक गहराई (B-Tree
में अधिक स्तर) ) लंबी अनुक्रमणिका भी कैश मिस अनुपात को बढ़ाती है।
प्रत्येक पूर्णांक के औसत मानचित्र में कितने तार हैं?
यदि अपेक्षाकृत कम हैं, तो आप केवल पूर्णांक कॉलम और PostgreSQL
. पर एक अनुक्रमणिका बना सकते हैं रिकॉर्ड पर ठीक फ़िल्टरिंग करेगा:
CREATE INDEX ix_mytable_assoc ON mytable (assoc);
SELECT floatval
FROM mytable
WHERE assoc = givenint
AND phrase = givenstring
आप स्ट्रिंग हैश पर इंडेक्स बनाने पर भी विचार कर सकते हैं:
CREATE INDEX ix_mytable_md5 ON mytable (DECODE(MD5(phrase), 'HEX'));
SELECT floatval
FROM mytable
WHERE DECODE(MD5(phrase), 'HEX') = DECODE(MD5('givenstring'), 'HEX')
AND phrase = givenstring -- who knows when do we get a collision?
प्रत्येक हैश केवल 16
है बाइट लंबा है, इसलिए अनुक्रमणिका कुंजियाँ बहुत छोटी होंगी जबकि अभी भी चयनात्मकता लगभग पूरी तरह से संरक्षित हैं।