我尝试通过 CodeIngiter 在包含大约 1.200.000 条记录的表上尽可能快地进行查询......
我已经在 name 、 tags 和 categories 上创建了 3 个索引
*/
SET FOREIGN_KEY_CHECKS=0;
-- ----------------------------
-- Table structure for videos
-- ----------------------------
DROP TABLE IF EXISTS `videos`;
CREATE TABLE `videos` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
`name_url` varchar(255) DEFAULT NULL,
`categories` varchar(255) DEFAULT NULL,
`embed` tinytext,
`description` text,
`tags` varchar(255) DEFAULT NULL,
`hd` smallint(6) DEFAULT '0',
`views` int(11) NOT NULL DEFAULT '0',
`likes` int(11) DEFAULT '0',
`dislikes` int(11) DEFAULT '0',
`cover` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`,`name`),
FULLTEXT KEY `mega_search` (`name`,`tags`,`categories`)
) ENGINE=MyISAM AUTO_INCREMENT=1273355 DEFAULT CHARSET=latin1;
但是响应太长=> 此查询的总执行时间 7.0999
SELECT *
FROM `videos`
WHERE `categories` LIKE '%Reality%' ESCAPE '!'
ORDER BY `id` DESC
LIMIT 20
最佳答案
如评论所述,您的谓词 LIKE '%Reality%'
无法使用常规索引进行优化。您需要使用全文搜索解决方案。
我写了一篇关于这个的演讲:
关于mysql - 如何在非常大的数据库上快速搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39733020/