美文网首页
MySQL——如何截取合适的左前缀索引长度

MySQL——如何截取合适的左前缀索引长度

作者: python与数据分析 | 来源:发表于2020-02-13 20:01 被阅读0次
1、 理想的索引

①:查询频繁 :②区分度高 ③:长度小 ④: 尽量能覆盖常用查询字段.

注意: 索引长度直接影响索引文件的大小,影响增删改的速度,并间接影响查询速度(占用内存多).

2、针对列中的值,从左往右截取部分,来建索引

①: 截的越短, 重复度越高,区分度越小, 索引效果越不好

②: 截的越长, 重复度越低,区分度越高, 索引效果越好,但带来的影响也越大--增删改变慢,并间影响查询速度.

所以, 我们要在 区分度 + 长度 两者上,取得一个平衡.
惯用手法: 截取不同长度,并测试其区分度,

mysql> select count(distinct left(word,6))/count(*) from dict;
+---------------------------------------+
| count(distinct left(word,6))/count(*) |
+---------------------------------------+
|                                0.9992 |
+---------------------------------------+
1 row in set (0.30 sec)
捕获.PNG

对于一般的系统应用: 区别度能达到0.1,索引的性能就可以接受.

3、对于左前缀不易区分的列 ,建立索引的技巧

如 url列

http://www.baidu.com

http://www.zixue.it

列的前11个字符都是一样的,不易区分, 可以用如下2个办法来解决

① 把列内容倒过来存储,并建立索引

Moc.udiab.www//:ptth

Ti.euxiz.www//://ptth

这样左前缀区分度大,

② 伪hash索引效果

同时存 url_hash列

典型问题
捕获11.PNG

答:问题出在两个方面:①建表时使用的innodb存储引擎2②varbinary(3000),因为innodb,只查询主键id时,是聚簇索引,造成大量的页分裂,所以速度慢。解决:改为myisam存储引擎

笔记(可忽略)

优化上不要脱离实际业务逻辑,独立索引没有实际意义,同时建立多个独立索引,仅有一个索引有效。应该建立复合索引

mysql 命令:

1、清除缓存:reset query cache;

2、在某列上增加索引:alter table goods add index price(shop_price);

3、使profiling生效:set profiling = 1

4、查看语句执行效率:show profiles;

5、查询语句执行效果(例如:查看索引使用情况):explain + 查询语句

6、删除索引:alter table goods drop index price;

7、添加复合索引:alter table goods add index cat_price(cat_id,shop_price);

疑问:用复合索引一定会快吗?

myisam 都是指向磁盘的,轻量级的

innodb 直接在主键索引上存储行数据
如何建立高性能索引:
首先分析这是什么表,是聚簇索引还是非聚簇索引,能否索引覆盖,是否有常用的几个列共同出现常用查询,则建立联合查询,索引的长度建立多少

相关文章

  • MySQL——如何截取合适的左前缀索引长度

    1、 理想的索引 ①:查询频繁 :②区分度高 ③:长度小 ④: 尽量能覆盖常用查询字段. 注意: 索引长度直接...

  • 第十七节、怎么给字符串字段加索引?

    mysql是支持前缀索引,也就是说,可以定义字符串的一部分作为索引。默认地,如果创建索引的语句不指定前缀长度,那么...

  • Mysql前缀索引长度确定方法

    MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也有它的坏处:MySQL 不能在 ORD...

  • MySQL索引机制(详细+原理+解析)

    一.索引的类型与常见的操作 前缀索引 MySQL 前缀索引能有效减小索引文件的大小,提高索引的速度。但是前缀索引也...

  • mysql笔记

    前缀索引:使用字段的部分前缀做为索引,可以有效减少索引的长度 1)、创建索引 alter table testdb...

  • mysql 索引长度、区分度和前缀索引

    好的索引 1、查询频繁 2、 区分度高 3、长度小 4、尽量能覆盖常用查询字段 索引长度的重要性 索引长度直接影响...

  • Mysql索引失效

    mysql 索引失效的原因有哪些?Mysql索引失效的原因 1、最佳左前缀原则——如果索引了多列,要遵守最左前缀原...

  • MySQL 前缀索引

    MySQL 前缀索引 当要索引的列字符很多时 索引则会很大且变慢( 可以只索引列开始的部分字符串 节约索引空间 从...

  • MySQL前缀索引

    一.定义 前缀索引顾名思义,定义字符串的一部分当做索引,而不是把整个字符串当做索引。默认地,如果你创建索引的语句不...

  • MySQL 创建前缀索引

    alter table 表名 add index 索引名(列名(100)); 列名后面的数字代表前缀的长度,前缀长...

网友评论

      本文标题:MySQL——如何截取合适的左前缀索引长度

      本文链接:https://www.haomeiwen.com/subject/ftglfhtx.html