我在消息列中有 3,090,590 行,我正在使用此代码一次获取 3000 行。
我正在尝试将我的 SQL 转换为 NoSQL,为此我用 Ajax 编写了一个 PHP 脚本。Ajax 请求$page
每次乘以;例如 3000、9000、12000...
SELECT * FROM mesajciklar order by id ASC LIMIT $page,3000
不知何故,即使我限制查询,它总是会扫描整个表,这使得 MySQL 使用 100% 的可用 CPU。我对每一列都有完整的索引,但它仍然很慢。
你能告诉我一个如何优化它的方法吗?
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 |