热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

mysql数据过长导致无法进行like筛选_Mysql优化系列之六,Mysql的索引解析

嗨,我是《零学IT》,专注IT那点事,接下来是系列专题,Mysql优化技巧分析!Mysql优化一、聚簇索引聚簇

嗨,我是《零学IT》,专注IT那点事,接下来是系列专题,Mysql优化技巧分析!

75fd896d9338acfb58792c498577b457.png

Mysql优化

一、聚簇索引
d7cf03c1a8cec444b264b19cbee4e7ab.png

聚簇索引

1、MyISAM的主索引和二级索引都指向该数据在磁盘的位置。

实际上在MyISAM中主键索引和其他的二级索引没有什么区别。

2、InnoDB的主索引的节点与数据放在一起,二级索引的节点存放的是主键的位置。

这种主键索引方式称之为聚簇索引。

3、InnoDB默认会将表的主键作为聚簇的列;如果没有主键,则会选择第一个非空的唯一索引代替;

如果没有非空唯一索引,会隐式定义一个6字节的rowid主键来作为聚集索引

4、在InnoDB中,不要使用UUID来作为聚集索引,否则性能会很糟糕,

因为它使得聚集索引的插入变得完全随机,使得数据没有任何聚集特性。


二、覆盖索引
8e93b9e313e3ecb6937c3c85cd02006a.png

覆盖索引并不是一种真正的索引

覆盖索引并不是一种新的索引类型,而是一个种查询工具。

简单来说,当能通过检索索引就可以读取想要的数据,

那就不需要再到数据表(回表)中读取行了。

一个索引包含了(或覆盖了)满足查询语句中字段与条件的数据就叫做覆盖索引。

覆盖索引的优点:

1、索引条目通常远小于数据行大小,只需要读取索引,则mysql会极大地减少数据访问量。

2、因为索引是按照列值顺序存储的,

所以对于IO密集的范围查找会比随机从磁盘读取每一行数据的IO少很多。

3、一些存储引擎如myisam在内存中只缓存索引,数据则依赖于操作系统来缓存,因此要访问数据需要一次系统调用。

4、覆盖索引对innodb表特别有用,innodb的二级索引在叶子节点中保存了行的主键值,所以如果二级主键能够覆盖查询,则可以避免对主键索引的二次查询。


三、创建索引的注意事项
420c2cfa164ab333ff066102c6b43391.png

索引,索引

1、索引不会存储Null值的列。只要列中包含null值,就不会被包含到索引中。所以我们在设置数据库时,尽量不要让数据库字段为null。

2、使用短索引。如果一个索引列过长,最好只截取这列的前面一段内容,创建索引。短索引不仅可以提高查询速度,而且可以节省磁盘空间和IO操作。

3、索引列排序。通常where条件使用索引的话,那么order by就无法使用索引。因此如果需要索引,可以将排序列创建到复合索引中。

4、尽量不要使用like语句,如果非用不可,尽量使用like 'xxx%'的方式,如果使用like '%xxx%'的方式,索引就会失效。

5、尽量不要在列上使用函数或者计算。比如 where age + 1 = 5,这样会导致索引失效,最好改成 where age = 4。

6、不使用not in、<>等操作&#xff0c;对于not in&#xff0c;可以使用not exists代替。对于<>&#xff0c;可以使用相同效果的运算符代替。比如a<>0&#xff0c;可以使用a<0 or a>0代替。

7、对于复合索引&#xff0c;条件需要和索引列一一对应&#xff0c;如果前面的列不能使用索引&#xff0c;则后面的列也无法使用索引(最左匹配原则)。


要是有需要交流的欢迎&#xff0c;来撩&#xff01;

16f1a329f50f5a558966622d23375b64.png

hi&#xff0c;来撩&#xff01;




推荐阅读
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了软件测试知识点之数据库压力测试方法小结相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 视图分区_组复制常规操作网络分区amp;混合使用IPV6与IPV4 | 全方位认识 MySQL 8.0 Group Replication...
    网络分区对于常规事务而言,每当组内有事务数据需要被复制时,组内的成员需要达成共识(要么都提交,要么都回滚)。对于组成员资格的变更也和保持组 ... [详细]
  • 主从复制_mysql主从复制简介
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql主从复制简介相关的知识,希望对你有一定的参考价值。  ... [详细]
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
  • 安装mysqlclient失败解决办法
    本文介绍了在MAC系统中,使用django使用mysql数据库报错的解决办法。通过源码安装mysqlclient或将mysql_config添加到系统环境变量中,可以解决安装mysqlclient失败的问题。同时,还介绍了查看mysql安装路径和使配置文件生效的方法。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了在Oracle数据库中创建序列时如何选择cache或nocache参数。cache参数可以提高序列的存取速度,但可能会导致序列丢失;nocache参数可以避免序列丢失,但在高并发访问时可能导致性能问题。文章详细解释了两者的区别和使用场景。 ... [详细]
  • 本文介绍了OkHttp3的基本使用和特性,包括支持HTTP/2、连接池、GZIP压缩、缓存等功能。同时还提到了OkHttp3的适用平台和源码阅读计划。文章还介绍了OkHttp3的请求/响应API的设计和使用方式,包括阻塞式的同步请求和带回调的异步请求。 ... [详细]
  • Todayatworksomeonetriedtoconvincemethat:今天在工作中有人试图说服我:{$obj->getTableInfo()}isfine ... [详细]
  • 表里|层面_ShardingJDBC第一篇:分库分表
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了ShardingJDBC第一篇:分库分表相关的知识,希望对你有一定的参考价值。文章目录 ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了MySQL安装(windows版本)相关的知识,希望对你有一定的参考价值。1.下载.MyS ... [详细]
author-avatar
zhouwenjun
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有