ขณะนี้ฉันกำลังพยายามเรียกใช้แบบสอบถามบางอย่างเทียบกับการถ่ายโอนข้อมูลของความคิดเห็นของ Stack Overflow นี่คือลักษณะของสคีมา:
CREATE TABLE `socomments` (
  `Id` int(11) NOT NULL,
  `PostId` int(11) NOT NULL,
  `Score` int(11) DEFAULT NULL,
  `Text` varchar(600) NOT NULL,
  `CreationDate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `UserId` int(11) NOT NULL,
  PRIMARY KEY (`Id`),
  KEY `idx_socomments_PostId` (`PostId`),
  KEY `CreationDate` (`CreationDate`),
  FULLTEXT KEY `Text` (`Text`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8ฉันเรียกใช้แบบสอบถามนี้กับตารางและมันทำงานช้าอย่างไม่น่าเชื่อ (มี 29 ล้านแถว แต่มีดัชนีข้อความแบบเต็ม):
SELECT *
FROM socomments
WHERE MATCH (Text) AGAINST ('"fixed the post"' IN BOOLEAN MODE)ดังนั้นฉันจึงทำโปรไฟล์ผลลัพธ์คือ:
|| Status                     || Duration ||
|| starting                   || 0.000058 ||
|| checking permissions       || 0.000006 ||
|| Opening tables             || 0.000014 ||
|| init                       || 0.000019 ||
|| System lock                || 0.000006 ||
|| optimizing                 || 0.000007 ||
|| statistics                 || 0.000013 ||
|| preparing                  || 0.000005 ||
|| FULLTEXT initialization    || 207.1112 ||
|| executing                  || 0.000009 ||
|| Sending data               || 0.000856 ||
|| end                        || 0.000004 ||
|| query end                  || 0.000004 ||
|| closing tables             || 0.000006 ||
|| freeing items              || 0.000059 ||
|| logging slow query         || 0.000037 ||
|| cleaning up                || 0.000046 ||อย่างที่คุณเห็นมันใช้เวลานานในการเริ่มต้น FULLTEXT เป็นเรื่องปกติหรือไม่ ถ้าไม่ฉันจะแก้ไขได้อย่างไร
id_group 2id_group 23ด้วยการค้นหาของคุณในตารางหลักของคุณและ จำกัด การสืบค้นของคุณให้อยู่ในช่วง id 2.000 ถึง 2.999 และ 23.000 ถึง 23.999 แน่นอนว่าอันดับที่ 2 จะให้ผลลัพธ์มากกว่าที่คุณต้องการเมื่อคุณรวมความคิดเห็นทั้งหมดที่สร้างชุดค่าผสมของคำหลักใหม่ แต่ท้ายที่สุดแล้วควรเพิ่มความรวดเร็วให้กับทุกสิ่ง แน่นอนมันเพิ่มการใช้พื้นที่ดิสก์เป็นสองเท่า ความคิดเห็นใหม่ควรจะCONCAT'edไปที่ตารางกลุ่ม