MySQL优化(2):索引简述

一、基本语法

  创建索引前会先排序,会影响where和order by的效率。

  索引也是一张表,保存了主键和索引字段和指向实体表的记录,也是要占空间的,以索引文件的形式存储在磁盘。

  增删改数据时,索引指向也要改变,所以会慢,需要频繁删改的字段不适合建索引。

  索引的建立也需要不断的优化、调整。 

1、创建,两种写法
  CREATE [UNIQUE] INDEX 索引名 ON 表(列1,列2);
  主键索引:ALTER TABLE 表 ADD PRIMARY KEY (列);       #添加一个主键,索引值必须唯一,不能为null   
  唯一索引:ALTER TABLE 表 ADD UNIQUE 索引名(列1,列2);    #索引列的值必须唯一,可为null,null可出现多次      
  单值索引:一个索引只包含单个列,一个表可以有多个单列索引
  复合索引:ALTER TABLE 表 ADD INDEX 索引名(列1,列2);    #普通索引,索引值可出现多次
  *全文索引:ALTER TABLE 表 ADD FULLTEXT 索引名(列);
2、删除
  DROP INDEX 索引名 ON TABLE;
3、查看
  SHOW INDEX FROM 表;

二、索引结构

  1、Btree
  2、Hash索引
  3、full-text全文索引
  4、R-tree索引

  【Btree检索原理】

  树的高度表示最多要查找的次数,广度越广,深度越小查找次数越少

  B+Tree所有索引数据都在叶子结点上

  

  

三、索引优化思路

  1、开启慢查询日志,设置超过几秒为慢SQL,抓取慢SQL

  2、通过explain对慢SQL分析(重点)

  3、show profile查询SQL在Mysql服务器里的执行细节和生命周期情况(重点)

  4、对数据库服务器的参数调优

  

  接下来几章节对这四步进行总结。

四、索引使用场景

 哪些情况最好建:

  ①主键会自动建立唯一索引

  ②查询中与其他表关联的字段,外键关系建立索引

  ③频繁作为查询条件的字段应该创建索引

  ④查询或排序后的字段顺序最好和索引一致

  ⑤单值/组合索引的选择问题,在高并发下倾向创建组合索引

  ⑥查询中统计或者分组字段

 哪些情况最好不建:

  ①表记录太少

  ②经常增删改的表,因为更新表时,不仅要保存数据,还要保存索引文件。

  ③如果某个数据列包含许多重复的内容,为它建立索引就没有太大的实际效果,只为最经常查询和最经常排序的数据建立索引。

  ④数据所占空间过大的字段不应建索引,空间占的多,会导致树的深度变大

  (IO次数取决于b+树的高度h,假设当前数据表的数据为N,每个磁盘块数据项数量是m = 磁盘块的大小/数据项的大小,磁盘块的大小是固定,如果数据项占的空间越小,每个磁盘块数据项数量越多,也即每层能容纳更多数量的数据,树高度越低。)

  ⑤WHERE条件里用不到的字段不创建索引

  ⑥频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引

 

参考链接:https://www.cnblogs.com/ManyQian/p/9076247.html#_label2

原文地址:https://www.cnblogs.com/zjxiang/p/9142111.html

时间: 2024-08-01 05:27:37

MySQL优化(2):索引简述的相关文章

mysql 优化之索引的使用

mysql 优化之索引的使用 1:MySQL 索引简介: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车. 拿汉语字典的目录页(索引)打比方,我们可以按拼音.笔画.偏旁部首等排序的目录(索引)快速查找到需要的字. 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一

mysql优化之索引建立的规则

索引经常使用的数据结构为B+树.结构例如以下 如上图,是一颗b+树,关于b+树的定义能够參见B+树,这里仅仅说一些重点.浅蓝色的块我们称之为一个磁盘块,能够看到每一个磁盘块包括几个数据项(深蓝色所看到的)和指针(黄色所看到的),如磁盘块1包括数据项17和35.包括指针P1.P2.P3.P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块.真实的数据存在于叶子节点即3.5.9.10.13.15.28.29.36.60.75.79.90.99. 非叶子节点仅仅不存储真

mysql优化之索引

Mysql优化之使用索引 1,索引简介 索引是单独一种数据结构,单独存在的一个空间.可以把数据表里的建立了索引的字段,进和物理地址,存在在一块,这块空间就是'索引'. 查询数据先从索引中查询,查询到之后,可以直接定位到物理地址,通过物理地址,直接找到真实数据.查询会更快速. 索引是一种 以空间换时间的一种方式,牺牲了空间和写的速度,提高了查询速度 2,准备演示数据表 这里以myisam引擎的数据库为例,我准备了一张1800000条数据的表,这张表存储时包含了三个文件,.Frm是表结构文件,.MY

mysql优化之索引优化

Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引的类型.如何让查询使用索引,查询是索引算法的选择等等操作.(原文链接http://ddbiz.com/?p=961)涉及到数据库的查询时,大多数情况都是要建立索引的,MySQL的索引类型以及创建索引方式,可以参考其文档或者这里. 服务器参数设置 在于索引有关系的数据库参数中,有一些特别重要,如下:

mysql B+树索引简述

一,查询B+树索引的流程 B+树索引找到叶节点,再找到对应的数据页,然后将数据页加载到内存中,通过二分查找Page Directory中的槽,查找出一个粗略的目录,然后根据槽的指针指向链表中的行记录,之后在链表中依次查找. 需要注意的地方是,B+树索引不能找到具体的一条记录,而是只能找到对应的页.把页从磁盘装入到内存中,再通过Page Directory进行二分查找,同时此二分查找也可能找不到具体的行记录(有可能会找到),只是能找到一个接近的链表中的点,再从此点开始遍历链表进行查找. 二,聚簇索

MySQL优化之索引原理(二)

一,前言 ? 上一篇内容说到了MySQL存储引擎的相关内容,及数据类型的选择优化.下面再来说说索引的内容,包括对B-Tree和B+Tree两者的区别. 1.1,什么是索引 ? 索引是存储引擎用于快速找到记录的一种数据结构, 对性能的提升有很大的帮助,尤其当表中数量较大的情况下,索引正确的使用可以对性能提升几个数量级. 但是索引经常被忽略,不恰当的索引对性能可能还会带来负面效果. 1.2,什么时候添加索引 主键自动建立主键索引(唯一索引) where字句中的列,频繁作为查询字段的列 表连接关联的列

MySQL优化之——索引

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46591673 索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节. 大多数存储引擎有更高的限制.MYSQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关: MYISAM和InnoDB存储

mysql优化和索引

表的优化 1.定长与变长分离 如 int,char(4),time核心且常用字段,建成定长,放在一张表: 而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联. 2.常用字段和不常用字段要分离 3.在 1 对多需要关联统计的字段上,添加冗余字段. 列类型选择原则 1.字段类型优先级  整型 > date,time > enum,char > varchar > blob,text 2.够用就行,不要慷慨,大的字段浪费内存,影响速度. 3.尽量避免用NU

【Mysql优化】索引覆盖

索引覆盖 是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”,比平时的查询少一次到磁盘读数据的操作.(索引正好覆盖到查询的数据) 例如下面: mysql> use exam9; Database changed mysql> desc options; +----------------+---------------+------+-----+---------+-------+ | Field | Type

MySQL优化--创建索引,以及怎样索引才会生效 (03)

1. 创建索引 (看这里) 2.索引在什么情况下才会起作用(重点)