mysql 前缀索引_MySQL前缀索引
大家好,又见面了,我是你们的朋友全栈君。
有时候需要索引很长的字符字段列,这会增加索引的存储空间以及降低索引的查询效率,一种策略是可以使用哈希索引,还有一种就是使用前缀索引。
前缀索引是选择字符列的前n个字符作为索引,这样可以大大节约索引空间,从而提高索引效率。
前缀索引的选择性
使用前缀索引,在一些场景下可能使得重复的索引值变多,索引的选择性变低,查找时需要过滤更多的行,因此建立前缀索引也要考虑前缀的索引选择性不能太低。
Tips:主键索引和唯一索引的索引值是不可能重复的,索引的选择性就很高,查询效率也最好。
选择足够长的前缀可以更好的保证高选择性,但又不能太长,需要一个合适的长度。怎么选?
在数据增长不是很快的表,可以通过以下方式来计算出合适的前缀索引的选择长度值:
SELECT COUNT(DISTINCT index_column)/COUNT(*) FROM table_name;
Tips:index_column 代表要添加前缀索引的列
在数据增长很快的表中,上述方式计算就不准确了,原因在于数据增长很快的表 index_column 字段重复的记录和总记录数据变化都比较快,那么计算出来的前缀索引长度也是随着变化很快的。
创建前缀索引
ALTER TABLE table_name ADD INDEX index_name (index_column(length));
前缀索引的局限性
前缀索引能使索引更小、更快,但是 MySQL 无法使用前缀索引做 ORDER BY 和 GROUP BY , 也无法使用前缀索引做覆盖扫描。
后缀索引
MySQL 没有提供后缀索引,事实上,一些业务场景对后缀匹配选择性更高,比如我曾经参与过的项目,手机的入网标示imei号,前缀都是86等固定的国家编号开头,这个时候可以将字符反转后存储,就可以建立选择性较高的前缀索引。
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/142201.html原文链接:https://javaforall.cn
相关文章
- MySQL Error number: 3617; Symbol: ER_LATITUDE_OUT_OF_RANGE; SQLSTATE: 22S03 报错 故障修复 远程处理
- 探索冒险岛:MySQL之旅(冒险岛mysql)
- MySQL 组合查询实战:从入门到精通(mysql组合查询)
- MySQL索引优化:缩短查询响应时间的关键原则(mysql索引原则)
- 构建MySQL数据库的索引技巧(mysql索引的方法)
- MySQL中了解唯一性索引的重要性(mysql唯一性索引)
- 优化MySQL索引:实现效率最大化(使用mysql索引)
- 建立MySQL聚簇索引的智能指南(mysql建聚簇索引)
- MySQL与JavaWeb的完美连接(mysql连接javaweb)
- MySQL: 如何优化索引的删除速度(mysql删除索引很慢)
- 化MySQL索引碎片化优化及其技术实现(mysql索引碎片)
- MySQL中快速导入数据的技巧(mysql导入数据)
- 如何安装和配置MySQL的主从架构(mysql主从安装配置)
- 掌握MySQL连接命令,轻松实现数据库操作(mysql连接命令)
- MySQL与苹果系统的兼容性详解(mysql苹果系统)
- MySQL开发指南:学习构建数据库应用(mysql 开发文档)
- MySQL索引详解作用类型创建与使用(mysql中什么叫索引)
- MySQL实现两表数值相减的简单方法(mysql两表数值相减)
- 深入剖析MySQL的两表多条件匹配技巧(mysql两表多条件匹配)
- 处理1304年MySQL数据库处理突破性进展(1304 mysql)
- MySQL创建索引语句详解(mysql中创建索引语句)
- 深入探索Mysql三表内联的应用技巧(mysql三表内联)
- 使用MySQL数组进行高效数据处理(mysql_array)
- 如何避免 MySQL 查询不命中索引的问题(mysql不命中索引)
- MYSQL收费了 了解MySQL开源版的最新政策(mysql不再免费了吗)
- 简单易懂MySQL下载后如何进入数据库管理界面(mysql下载了怎么进入)
- MySQL上机分析总结数据存储优化与索引更好方式(mysql上机分析总结)
- MySQL索引建立失败,引起疑惑(mysql不能建索引)
- 合理运用查询优化器,MySQL也能高效查询(mysql不用建索引)