mysql - 如何在非常大的数据库上快速搜索

标签 mysql sql database

我尝试通过 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/

相关文章:

mysql - 通过外键查找 Max() 值

c# - C# 中的 SQL - 为什么这么冗长?

php insert语句未在mysql中插入数据

sql - sql中的'for all'查询

r - 分层数据框导致 R 中的零行/观察

mysql - 无法添加或更新子行: a foreign key constraint fails MYSQL : EF Core

java - 在 MySQL 和 Glassfish 中保存 ZonedDateTime

mysql - MySQL SP 中的更新语句显示缺少结束错误

SQL 选择行,前提是它们包含在给定年份的 TOP 中

mysql - 此查询对于 sha、CONCAT 和 X 等关键字意味着什么?