メッセージ列に 3,090,590 行あり、このコードを使用して一度に 3000 行を取得しています。
SQL を NoSQL に変換しようとしています。このため、Ajax で PHP スクリプトを作成しました。Ajax リクエストは$page
毎回乗算されます。たとえば、3000、9000、12000...
SELECT * FROM mesajciklar order by id ASC LIMIT $page,3000
どういうわけか、クエリを制限しても、常にテーブル全体をスキャンするため、MySQL は使用可能な CPU を 100% 使用します。すべての列に完全なインデックスを作成していますが、それでも非常に遅いです。
最適化する方法を教えてください。
mysql> | mesajciklar | CREATE TABLE `mesajciklar` (
-> `id` int(11) NOT NULL AUTO_INCREMENT,
-> `sira` int(11) NOT NULL DEFAULT '0',
-> `mesaj` text NOT NULL,
-> `yazar` varchar(255) NOT NULL DEFAULT '',
-> `ip` varchar(255) NOT NULL DEFAULT '',
-> `tarih` varchar(255) NOT NULL DEFAULT '',
-> `gun` int(11) NOT NULL DEFAULT '0',
-> `ay` int(11) NOT NULL DEFAULT '0',
-> `yil` int(11) NOT NULL DEFAULT '0',
-> `saat` varchar(255) NOT NULL DEFAULT '',
-> `oy` varchar(255) NOT NULL DEFAULT '',
-> `update2` varchar(255) NOT NULL DEFAULT '',
-> `updater` varchar(255) NOT NULL DEFAULT '',
-> `updatesebep` varchar(255) NOT NULL DEFAULT '',
-> `statu` varchar(255) NOT NULL DEFAULT '',
-> `silen` varchar(255) NOT NULL DEFAULT '',
-> `silsebep` varchar(255) NOT NULL DEFAULT '',
-> PRIMARY KEY (`id`),
-> UNIQUE KEY `id` (`id`) USING BTREE,
-> KEY `sira` (`sira`),
-> KEY `yazar` (`yazar`),
-> KEY `ip` (`ip`),
-> KEY `tarih` (`tarih`),
-> KEY `gun` (`gun`),
-> KEY `ay` (`ay`),
-> KEY `yil` (`yil`),
-> KEY `saat` (`saat`),
-> KEY `oy` (`oy`),
-> KEY `update2` (`update2`),
-> KEY `statu` (`statu`),
-> KEY `silsebep` (`silsebep`),
-> KEY `gun_2` (`gun`,`ay`,`yil`),
-> FULLTEXT KEY `mesaj` (`mesaj`),
-> FULLTEXT KEY `yazar_2` (`yazar`)
-> ) ENGINE=MyISAM AUTO_INCREMENT=1062473327 DEFAULT CHARSET=latin5 |