前言
百度是最强大的中文搜索引擎,试想如果没有百度,我们的生活将会怎样? 我们将会很难快速了解到我们生活必需的流行歌曲,体育赛事,好莱坞大片,旅游胜地,名医名院,书籍课程,等各种信息;像鄙人这种水平的低阶码农,也将没办法从技术博客中copy到现成代码来修改,妥妥的要失业。百度是高性能的检索工具,它要尽可能多的爬取全万维网的网页储存起来,还要能够在相当短的时间内响应用户的搜索,这绝对是不简单的。我们做不到百度那么牛,那么我们通过开源技术又如何实现高性能的检索呢?以下是我学习MySQL,MongoDB,ElasticSearch,PostgreSQL的相关笔记
MySQL实现
安装MySQL
docker pull hub.c.163.com/library/mysql
docker run -di --name mysql -p 33306:3306 -e MYSQL_ROOT_PASSWORD=root hub.c.163.com/library/mysql
进入容器内授权
docker exec -it mysql /bin/bash
mysql -u root -p
grant all privileges on *.* to root@"%" identified by "root" with grant option;
flush privileges;
使用B+树索引使用like查询,在关键字前加%来做模糊匹配将不会利用到索引,全表扫描必然很慢,无法实现高性能模糊匹配,而且对于text类型的字段,B+树索引必须指定长度,输入超过该长度索引就会失效,长度越长检索性能应当是越慢
CREATE TABLE `article` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`title` VARCHAR(200) NULL DEFAULT NULL,
`body` TEXT NULL,
PRIMARY KEY (`id`),
INDEX `title` (`title`),
INDEX `body` (`body`(100))
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;
INSERT INTO `article` (`id`, `title`, `body`) VALUES (1, '靓仔', '凌章是一个靓仔');
-- 走索引 ref 可以查到
explain select * from article where title = '靓仔';
-- 走索引 range 可以查到 超过长度应该差不到
explain select * from article where body like '凌章是一个靓仔';
-- 走索引 range 可以查到
explain select * from article where body like '凌章是%';
-- 走索引 range 查不到
explain select * from article where body like '一个靓仔%';
-- 不走索引 ALL 可以查到