Şu anda Stack Overflow'ın yorumlarının bir veri dökümüne karşı bazı sorgular çalıştırmaya çalışıyorum. Şema şöyle görünüyor:
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
Bu sorguyu tablo karşı çalıştırdı ve inanılmaz derecede yavaş koştu (29 milyon satır var, ama bir tam metin dizini vardır):
SELECT *
FROM socomments
WHERE MATCH (Text) AGAINST ('"fixed the post"' IN BOOLEAN MODE)
Bu yüzden profilli, sonuçları:
|| 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 ||
Gördüğünüz gibi, FULLTEXT başlatmasında uzun zaman geçiriyor. Bu normal mi? Değilse, nasıl düzeltebilirim?
id_group 2
ve örneğin veid_group 23
. Bununla, ana tablonuzun içinde aramanız ve sorgunuzu 2.000 ila 2.999 ve 23.000 ila 23.999 kimlik aralıklarıyla sınırlandırın. Tabii ki, 2. yeni anahtar kelime kombinasyonları oluşturan tüm yorumları karıştırdıkça daha fazla sonuç elde edeceksiniz, ancak son olarak her şeyi hızlandırmalıdır. Tabii ki disk alanı kullanımını iki katına çıkarıyor. Yeni yorumlar grup tablosuna CONCAT'lanmalıdır .