mysql优化概述2
发布时间:2020-12-11 23:16:43 所属栏目:MySql教程 来源:网络整理
导读:一、索引的概念利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引。索引的关键字一定是排序的。二、索引的类型mysql支持四种索引:1、主键索引2、唯一索引3、普通索引4、全文索引无论任何形式的索
一、索引的概念 利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引。索引的关键字一定是排序的。 二、索引的类型 mysql支持四种索引: 1、主键索引 2、唯一索引 3、普通索引 4、全文索引 无论任何形式的索引,都是通过建立关键字与位置的对应关系来实现的。 差异:对索引关键字的要求不同。 关键字:记录部分数据(某个字段,某些字段,某个字段的一部份) 普通索引(index):对关键字没有要求 唯一索引(unique index):要求关键字不能重复,同时增加唯一约束。 主键索引(primary key):要求关键字不能重复,同时不能为NULL。 全文索引(fulltext key):关键字的来源不是所有字段的数据,而是从字段中提取的特别关键字。 *如果一个索引通过在多个字段上提取的关键字,称之为复合索引。 三、索引的语法 1、索引的使用场景 索引检索:条件过滤 索引排序:如果order by排序需要的字段上存在索引,可能使用到索引。 索引覆盖:索引拥有的关键字内容,覆盖了查询所需要的全部数据,此时就不需要数据区获取数据,仅仅在索引区中。 student表结构如下: 如果我们要查询name,nickname,和sn这三个字段: > select name,nickname,sn from student where name like 'a%'; 通过分析我们可以在ename上建立索引来提高查询效率。 > alter table student add index `i_name` (`name`); > explain select name,sn from student where name like 'a%'G; 如上所示,查询确实用到了索引。 如果我们在name,nickname和sn上建立一个复合索引,结果会是怎么样? > alter table student add index `i_nns` (`name`,`nickname`,`sn`); 如上所示,只需要检索出索引中的所有数据即可。 五、索引使用的原则 索引存在,没有满足使用原则,导致索引无效。 1、列独立,如需要某个字段上使用索引,则字段在参与的表达式中,保证字段独立在一侧。 如上所示,id+1=5 就不是独立列,所以没有使用索引。 2、左原则 LIKE:所匹配的关键字必须在左边,如果通配符出现在左边将不能使用索引。 复合索引:仅仅针对左边字段有效果 3、OR的原则 必须要保证两端的条件都存在可以使用的索引,才能使用到索引。 4、mysql智能选择 即使满足了如上的原则,mysql也不一定会使用索引。 弃用索引的主要原因:查询即使使用索引,会导致出现大量的随机IO,相对于数据记录从第一条遍历到最后一条的顺序IO开销,还要大。 ? ? (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |