搜索引擎进行信息检索的优化策略方法(10多万条用户年龄与姓名联合索引的处理以及自我要求 )
优采云 发布时间: 2022-02-15 02:11搜索引擎进行信息检索的优化策略方法(10多万条用户年龄与姓名联合索引的处理以及自我要求
)
在程序员的世界里,美好的应用体验来自程序员对细节的处理和自我需求的境界。年轻人也是忙碌的程序员。每一天,每一个星期,他们都会留下一些脚印。就是这些创作的内容,有一种坚持,就是不知道为什么,迷茫的你不妨看看码农的轨迹。
优美的音乐节奏带你走过这个效果的编码过程。 每天坚持,是每一个理想青年的追求 追随年轻人的脚步,也许你的答案就在这里如果你有困惑,看这里
在这里,有一张超过10万用户数据的表,你知道接下来会发生什么吗?这是 create table 语句的一小部分
CREATE TABLE `t_user`(<br /> `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMIT '主键ID',<br /> `id_card` VARCHAR(32) DEFAULT NULL COMMIT '用户*敏*感*词*',<br /> `u_name` VARCHAR(32) DEFAULT NULL COMMIT '用户姓名',<br /> `u_age` INT(11) DEFAULT NULL COMMIT '用户年龄',<br /> `u_male` TINYINT(1) DEFAULT NULL ,<br /> PRIMARY KEY(`id`) ,<br /> KEY `id_card`(`id_card`) ,<br /> KEY `name_age`(`u_name` , `u_age`)<br />) ENGINE = INNODB
如上图,我们创建了一个联合索引(用户年龄和姓名)。如果现在有一个高频请求,我们想根据他的名字查询用户的年龄。这个联合索引是故意的。对于这种高频请求,可以使用覆盖索引,不再需要在表中查找整行记录,减少语句的执行时间。
索引字段的维护是有成本的,所以在构建冗余索引支持覆盖索引时,需要权衡业务的需求,不能盲目。
1个前缀索引
如果为每种查询都设计了一个索引,那么索引就会太多。例如,如果我们使用另一个用户的*敏*感*词*号来查询他的姓名或地址,那么这个查询需求出现在业务中的概率并不高。也可以让它在第二次查询时进行全表扫描,但这太少了。数据量以百万计,人眼感觉很慢。
所以索引的“最左前缀”可以用来定位记录。
如上图所示,索引项是按照字段在索引定义中出现的顺序进行排序的。当你需要找到所有叫“张三”的人时,可以快速定位到ID为1001的位置,然后向后遍历得到所有的人。期望的结果。
当你的查询是模糊查询时,也可以使用上面的索引,找到第一个满足条件的记录,ID为1001,然后向后遍历,直到不满足条件。
select * from t_user where name like '张 %'
这样,只要查询条件满足联合索引的最左前缀,就可以使用索引来加快检索速度。最左边的前缀可以是联合索引最左边的N个字段,可以称为前缀索引。
基于联合索引的使用,如何安排索引中字段的顺序是建立联合索引时效率的一个关键点。一个参考原则是
索引复用性:当有(a,b)的联合索引时,一般不需要单独在a上创建索引。如果你可以通过调整顺序来保持少一个索引,那么这个顺序往往是优先的。采用。
由于我们这里创建'name_age',从空间上看,name字段比age字段大,所以我们创建一个(name,age)联合索引和一个(age)单字段索引。
2 指数下推
比如这里t_user表的(name,age)的联合索引,当进行如下查询过滤时
select * from t_user where name like '张 %' and age=20
首先会使用(name, age)的联合索引的前缀索引规则,查找第一个满足条件的ID 1001,然后将表逐一返回到主键索引中查找数据行,如下图所示:
在这个过程中,InnoDB不看联合索引表age的值,只是将“name”第一个单词为“Zhang”的记录从来回表中一个一个取出。因此查询了3条数据,需要返回4次表。.
MySQL5.6引入的索引条件下推(index condition pushdown)可以在索引遍历过程中先判断索引中收录的字段,直接过滤掉不满足条件的记录,减少查询次数回到桌子上。如下所示
在这个过程中,InnoDB 判断 (name, age) 索引内的 age 是否等于 20。对于不等于20的记录,直接判断跳过。查询中只有 ID-1001、 ID-1011 这两条记录返回表获取数据进行判断,查询这三条数据只需要返回表2次.
完全的
不限思维,不限语言,是编程的最高境界。
以小编的性格,肯定要录一组视频,稍后上传
有兴趣的可以关注西瓜视频——早起的年轻人