MySQL like查询后置%索引失效分析

表结构

CREATE TABLE `t_food_shop` (`id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键',`shop_name` varchar(50) NOT NULL DEFAULT '' COMMENT '店铺名称',`shop_img` varchar(250) NOT NULL DEFAULT '' COMMENT '店铺图片',`category_name` varchar(50) NOT NULL DEFAULT '' COMMENT '品类名称',`price` varchar(50) NOT NULL DEFAULT '' COMMENT '消费价格',`area` varchar(50) NOT NULL DEFAULT '' COMMENT '所属地区',`collects` bigint(11) NOT NULL DEFAULT '0' COMMENT '收藏的数量',`shop_type` tinyint(3) NOT NULL DEFAULT '0' COMMENT '店铺的分类(0,蓝丝,1,黄丝)',`shop_grade` decimal(3,1) NOT NULL DEFAULT '0.0' COMMENT '店铺评级',`address` varchar(128) NOT NULL DEFAULT '' COMMENT '店铺地址',`longitude` varchar(16) NOT NULL DEFAULT '' COMMENT '经度',`latitude` varchar(16) NOT NULL DEFAULT '' COMMENT '纬度',`geo_hash` varchar(12) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '' COMMENT 'geohash',`create_time` timestamp NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',`update_time` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',`openrice_id` bigint(20) NOT NULL DEFAULT '0' COMMENT 'openrice 店铺唯一id',PRIMARY KEY (`id`) USING BTREE,KEY `idx_geohash` (`geo_hash`) USING BTREE,FULLTEXT KEY `idx_name` (`shop_name`) /*!50100 WITH PARSER `ngram` */
) ENGINE=InnoDB AUTO_INCREMENT=673319 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='美食店铺基本数据表';

查询执行计划

EXPLAIN
select id, shop_name, price, collects, shop_grade, address, longitude, latitude from t_food_shop  where geo_hash like 'wecny%';

geo_hash字段建立了索引,按照前缀查询,但是索引失效了。

“wecny”字符串长度为5,我们就来看看长度为5的字符串的重复率

select count(1) from t_food_shop;
SELECT (count(*) / 63061 ) percent,count(*) cnt,LEFT(geo_hash,5) prefix
FROM t_food_shop GROUP BY prefix ORDER BY percent DESC LIMIT 0,10;

可以看到,前缀为“wecny”的重复率竟然占到了0.2234,区分度大小了,mysql选择了全表扫描。
我们来试试百分比为0.0338前缀为"wecp3"的执行计划

EXPLAIN
select id, shop_name, price, collects, shop_grade, address, longitude, latitude from t_food_shop  where geo_hash like 'wecp3%';

可以看到使用到了idx_geohash索引

结论:字段值的重复率过高会导致索引失效

MySQL like查询后置%索引失效分析相关推荐

  1. mysql 索引失效分析

    大神总结的索引失效一句话理解后就不用看我下面的文章了,这就是 "模型数空运最快" 模:模糊查询like  %在前面索引失效 型:数据类型有变化索引失效 数:索引列使用了函数索引失效 ...

  2. mysql查询where后面索引失效_where条件索引失效情况

    虽然说索引在使用上可能有种种限制,但是还是在数据库设计中被充分利用.因为在大部分情况下索引还是被用来提高数据库性能的一个工具.不过有些数据库工程师往往会犯一些低级的错误,导致索引失效.如在Where条 ...

  3. mysql分表后怎么索引_分库分表后的索引问题

    摘要 最近遇到一个慢sql,在排查过程中发现和分库分表后的索引设置有关系,总结了下问题. 问题 在进行应用健康度盘点时,发现有个慢sql 如下 select brandgoodid from bran ...

  4. mysql范围查询如何建索引_MySQL索引(二):建索引的原则

    在了解了索引的基础知识及B+树索引的原理后(如需复习请点这里),这一节我们了解一下有哪些建索引的原则,来指导我们去建索引. 建索引的原则 1. 联合索引 我们可能听一些数据库方面的专业人士说过:&qu ...

  5. mysql隐式转换造成索引失效的事故总结

    隐式转换导致索引失效.这一点应当引起重视.也是开发中经常会犯的错误. 由于表的字段tu_mdn定义为varchar2(20),但在查询时把该字段作为number类型以where条件传给mysql,这样 ...

  6. 索引的使用—— 验证索引提升查询效率 || 避免索引失效 —— 全值匹配 /最左前缀法则/范围查询右边的列,不能使用索引/不要在索引列上进行运算操作/字符串不加单引号,造成索引失效

    索引的使用 索引是数据库优化最常用也是最重要的手段之一, 通过索引通常可以帮助用户解决大多数的MySQL的性能优化问题 验证索引提升查询效率 查询速度很快,接近0s ,主要的原因是因为id为主键,有索 ...

  7. mysql 联合查询后排序_MySQL的查询(联合查询,查询排序,正则表达式)

    MySQL的查询(联合查询,查询排序,正则表达式) MySQL的查询(联合查询,查询排序,正则表达式) MySQL的查询 联合查询实例 -- 联合查询 SELECT * FROM user union ...

  8. 前置++与后置++的要点分析

    前置++和后置++,都是自增1,但是表达式返回值不同.执行效率上前置++更快. 前置++返回是自增之后的值. 等价于num+=1; rerurn num; 后置++返回的是自增之前的值. 等价于  i ...

  9. MySQL范围查找时,索引失效问题探究

    今日推荐 Java 8 一行代码解决了空指针问题,太厉害了...List中remove()方法的陷阱,被坑惨了!25000 字详解 23 种设计模式,原来可以这么简单!最牛逼的 Java 日志框架,性 ...

最新文章

  1. 大佬教你极简方法来处理Android SharedPreferences设计与实现
  2. 高达82 fps的实时文本检测,可微分二值化模块
  3. 三心二意,助你好运?
  4. FTP使用外部数据源
  5. ios程序中调用腾讯OpenAPI时遇到的问题
  6. wifi的country code
  7. Java面经-海康威视
  8. Win10 CMD命令大全—超好用快捷键
  9. 控制工程实践(8)——PID四种类型控制器(之比例-积分控制器PI)
  10. 2019下半年计算机二级c语言,2019年下半年计算机二级C语言试题(4)
  11. ODC(Orthogonal Defect Classification)简介
  12. Android卡通农场闪退,卡通农场闪退解决办法
  13. 什么是汽车公告?汽车公告主机厂要做什么?
  14. 甲级测绘资质审批常见问题-甲级测绘资质如何办理?
  15. IoT:OneNET - 中国移动物联网平台介绍
  16. 研究生博士生都喜欢逛哪些网站?
  17. RNNLSTM学习总结
  18. MRP(物料需求计划) 的运作机制
  19. C语言程序设计(第二版) 主编:余贞侠 何钰娟 课后习题 代码题答案
  20. gpt linux双系统安装win7系统分区格式化,在不格式化gpt分区的情况下重新安装win7系统的教程...

热门文章

  1. 计算机辅助插图设计读书心得,计算机辅助设计课程心得体会
  2. 台式计算机主板能换吗,可以更换台式机CPU吗?将台式计算机更改为CPU的步骤
  3. android保存连接地址到桌面快捷方式,Android创建桌面快捷方式两种方法
  4. 【欧拉回路】【欧拉路径】【Fleury算法】CDOJ1634 记得小苹初见,两重心字罗衣...
  5. linux gzip和tar一起用,Linux下压缩工具gzip和归档工具tar及其实战shell应用
  6. vlc视频转发注意事项海康摄像头上云注意事项
  7. 远光软件2020年报: 创新效能持续释放,营收利润稳健增长
  8. TurtleBot3 循线机器人
  9. 小米电动滑板车被曝漏洞,黑客可远程控制 1
  10. sci论文绘图通用规范