1.为什么要有索引
因为我们在平时开发中,可能会遇到系统性能下降,sql慢,执行时间长,等待时间长的时候
而导致这个的原因有:1.查询语句写的栏
2.索引失效
1.单值索引
2.复合索引
3.关联查询太多join(设计缺陷或不得已的需求)
4.服务器调优及各个参数设置(缓冲,线程数等)
2.常见通用的join查询
1.sql执行顺序
手写
机读
总结:
2.join图
共七种,不在复习 因为简单<br />3.索引入门<br />1.什么是索引<br />mysql官方对索引的定义是,索引是帮助Mysql高效获取数据的数据结构<br />总结:索引是一种数据结构,索引是一种排好序的快速查找数据结构。<br />2.索引的目的<br />索引的目的是为了提高查找效率,类似于字典<br />帮助理解:<br />比如我们在查找一条sql 的时候,根据名字查,mysql默认是所属数据是混乱的,不是有序的,因此我们可以用索引的方式,建一个以name排序的结构,我们在查询的时候,就不需要莫无目的的查找,可以指定通过参数值定位到指定的数据。<br />索引的优点<br />索引可以提高检索效率,降低数据库的io成本<br />通过索引对数据进行排序,降低数据排序的成本,降低了cpu的消耗<br />索引的缺点<br />索引也会占用磁盘空间,如果建立大量的索引,会导致更新速度变慢,因为,每次在更新的时候也需要更新索引的指向。<br />mysql的索引分类:<br />单值索引:即一个索引只包含单个字段,但是一张表可以有多个字段<br />唯一索引:索引列的值必须唯一,但允许有空值<br />复合索引:即一个索引包含多个列<br />3.基本语法:<br />创建:<br />create index indexName on user (columnName(name));<br />alert user add index [indexName] on (columnName(name))<br />删除:<br />drop index[indexName] on user;<br />查看:<br />show index from user\g<br />alter table的使用<br />有四种方式来添加索引:<br />1.alter table table_name add primary key(column_list):添加一个主键,这意味着这个索引必须是唯一的,且不能为null。<br /><br />4.mysql索引结构:<br />1.BTree索引<br />2.Hash索引<br />3.full-text全文索引<br />4.R-Tree索引<br />5.那些情况需要建索引<br />1.主键自动建立唯一索引<br />2.频繁作为查询的字段应该建立索引<br />3.查询中与其他表关联的字段,外键关系建立索引<br />4.频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引<br />5.where条件里用不到的字段不适合建立索引<br />6.单键/组合索引的选择问题,who?(在高并发情况下倾向创建组合索引)<br />7.查询中排序的字段,排序字段若通过索引去访问将大大提高排序速度<br />8.查询中统计或者分组字段。<br />6.那些情况不需要建立索引<br />1.表记录太少<br />2.经常增删改的表<br />3.如果某个数据列包含太多重复的内容,建立索引就没有太多实际效果<br />7.mysql的性能调优<br />1.mysql Query Optimizer:mysql自带的sql优化器<br />2.mysql的常见瓶颈<br />1.cpu:cpu在饱和的时候一般发生在数据装入内存或从磁盘上读取数据的时候<br />2.IO:磁盘IO瓶颈发生在装入数据远远大于内存容量的时候<br />3.服务器硬件的性能瓶颈:top,free,iostat,和vmstat来查看系统的性能状态<br />3EXplain<br />1.是什么?<br />使用EXPLAIN关键字可以模拟优化器执行sql查询语句,从而知道Mysql是如何处理你的sql语句的<br />分析你的查询语句,或是表结构的性能瓶颈<br />2.怎么用?<br />explain + sql 语句 程序员的基本美德<br />3.能干嘛<br /><br />4.explain中包含的字段<br /><br />id:
