การC
เปรียบเทียบเป็นตัวเลือกที่เหมาะสม
ทุกอย่างเร็วขึ้นเล็กน้อยหากไม่มีโลแคล และเนื่องจากไม่มีการเปรียบเทียบล่ะค่ะที่เหมาะสมในการสร้างฐานข้อมูลโดยไม่ต้องC
เปรียบเทียบความหมายกับ
มันอาจเป็นความเจ็บปวดที่จะต้องให้การเปรียบเทียบสำหรับการดำเนินการหลายอย่าง ไม่ควรมีความแตกต่างที่เห็นได้ชัดในความเร็วระหว่างการเปรียบเทียบค่าเริ่มต้นกับการจัดเรียงแบบเฉพาะกิจ ท้ายที่สุดมันเป็นเพียงข้อมูลที่ไม่เรียงลำดับและจะใช้กฎการเรียงลำดับเมื่อเรียงลำดับ
โปรดทราบว่า Postgres จะสร้างบนการตั้งค่าภาษาที่ระบบปฏิบัติการพื้นฐานกำหนดไว้ดังนั้นคุณต้องสร้างสถานที่เพื่อให้แต่ละสถานที่ใช้งาน เพิ่มเติมในคำตอบที่เกี่ยวข้องในดังนั้นที่นี่และที่นี่
แต่เป็น@Craig กล่าวแล้ว , ดัชนีเป็นคอขวดในสถานการณ์นี้ การเปรียบเทียบของดัชนีจะต้องตรงกับการเปรียบเทียบของโอเปอเรเตอร์ที่ใช้ในหลายกรณีที่เกี่ยวข้องกับข้อมูลอักขระ
คุณสามารถใช้ตัวCOLLATE
ระบุในดัชนีเพื่อสร้างดัชนีที่ตรงกัน ดัชนีบางส่วนอาจเป็นตัวเลือกที่สมบูรณ์แบบหากคุณกำลังผสมข้อมูลในตารางเดียวกัน
ตัวอย่างเช่นตารางที่มีสตริงสากล:
CREATE TABLE string (
string_id serial
,lang_id int NOT NULL
,string text NOT NULL
);
และคุณมักจะสนใจภาษาเดียวในแต่ละครั้ง:
SELECT *
FROM string
WHERE lang_id = 5 -- 5 being German / Germany here
AND string > 'foo' COLLATE "de_DE"
ORDER BY string COLLATE "de_DE";
จากนั้นสร้างดัชนีบางส่วนเช่น:
CREATE INDEX string_string_lang_id_idx ON string (string COLLATE "de_DE")
WHERE lang_id = 5;
หนึ่งภาษาสำหรับแต่ละภาษาที่คุณต้องการ
ที่จริงแล้วการสืบทอดอาจเป็นวิธีที่เหนือกว่าสำหรับตารางเช่นนี้ จากนั้นคุณสามารถมีดัชนีธรรมดาในแต่ละตารางที่สืบทอดมาซึ่งมีสตริงสำหรับสถานที่เดียวเท่านั้น คุณต้องคุ้นเคยกับกฎพิเศษสำหรับตารางที่สืบทอดมาแน่นอน