一、索引的概念
利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引。索引的关键字一定是排序的。 二、索引的类型
mysql支持四种索引:
1、主键索引
2、唯一索引
3、普通索引
4、全文索引 无论任何形式的索引,都是通过建立关键字与位置的对应关系来实现的。
差异:对索引关键字的要求不同。
关键字:记录部分数据(某个字段,某些字段,某个字段的一部份) 普通索引(index):对关键字没有要求
唯一索引(unique index):要求关键字不能重复,同时增加唯一约束。
主键索引(primary key):要求关键字不能重复,同时不能为NULL。
全文索引(fulltext key):关键字的来源不是所有字段的数据,而是从字段中提取的特别关键字。 *如果一个索引通过在多个字段上提取的关键字,称之为复合索引。 三、索引的语法
创建:
1、创建表时创建索引
create table student (
id int unsigned not null auto_increment,
name varchar(32) not null default '',
nickname varchar(32) not null default '',
sn char(12) not null default '',
desc text,
primary key (`id`), --主键索引
unique index `ui_sn` (`sn`), --唯一索引
index `name_nickname` (`name`,`nickname`), --复合索引
fulltext index `fi_desc` (`desc`) --全文索引
)engine=myisam charset=utf8;
索引可以起名字,主键索引不能起名字,一个表只能有一个主键索引,其它索引可以有多个。名字可以省略,mysql自动生成。 2、更新表结构时创建索引
alter table student add primary key (`id`);
alter table student add unique index `ui_sn` (`sn`);
alter table student add index `name_nickname` (`name`,`nickname`);
alter table student add fulltext index `fi_desc` ('desc');
*如果表中存在数据,数据符合唯一或主键的约束才能创建成功。
*auto_increment属性,依赖于key。 删除:
alter table student drop primary key;
alter table student drop index `ui_sn`;
alter table student drop index `name_nickname`;
alter table student drop index `fi_desc`; 四、索引的使用
可以通过在select语句前使用explain,来获取该查询语句的执行计划。
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,nickname,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开销,还要大。

mysql优化概述2的更多相关文章

  1. MySQL优化概述

    一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...

  2. mysql优化概述4

    一.分区 1.分区概念 将某张表数据,分别存储到不同的区域中. 每个分区,都是独立的表,都要存储该分区的数据,索引信息. 2.创建分区 创建表并指定分区的选项 create table 表名 ( 定义 ...

  3. mysql优化概述3

    1.前缀索引 建立索引关键字一种方案. 通常会使用字段的整体作为索引关键字. 有时,使用字段前部分数据,也可以去识别某些记录. 语法: index `索引名` (`字段`(N)); 使用字段前N个字符 ...

  4. Mysql优化-概述

    摘抄并用于自查笔记 为什么要优化 一个应用吞吐量瓶颈往往出现在数据库的处理速度上. 随着应用程序的使用,数据库数据逐渐增多,数据库处理压力逐渐增大. 关系型数据库的数据是存放在磁盘上,读写速度慢(与内 ...

  5. Mysql优化概述及其压力测试工具

    衡量指标 TPS:Transactions Per Second (每秒传输的事物处理个数) ,这是指服务器每秒处理的事物数,支持事物的存储引擎如Innodb等特有的一个性能指标; QPS:Queri ...

  6. mysql优化一 之 优化内容概述及开启慢查日志的相关配置

    1-1数据库优化的目的 首先是为了避免出现页面访问错误(基本有三种) (1)由于数据库连接timeout产生的页面5XX错误 (2)由于慢查询造成页面无法加载 (3)由于阻塞造成的数据无法提交 其次: ...

  7. 深入MySQL(四):MySQL的SQL查询语句性能优化概述

    关于SQL查询语句的优化,有一些一般的优化步骤,本节就介绍一下通用的优化步骤. 一条查询语句是如何执行的 首先,我们如果要明白一条查询语句所运行的过程,这样我们才能针对过程去进行优化. 参考我之前画的 ...

  8. 0104探究MySQL优化器对索引和JOIN顺序的选择

    转自http://www.jb51.net/article/67007.htm,感谢博主 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序.表结构和数据准备参考本文最后部分" ...

  9. MySQL优化技巧

    目录 MySQL的特点 数据类型优化 整型类型 小数类型 字符串类型 时间类型 主键类型的选择 特殊类型的数据 索引优化 一个使用Hash值创建索引的技巧 前缀索引 多列索引 聚簇索引 覆盖索引 重复 ...

随机推荐

  1. 基于Vue的Ui框架

    基于Vue的Ui框架 饿了么公司基于vue开的的vue的Ui组件库 Element Ui 基于vue pc端的UI框架 http://element.eleme.io/ MintUi 基于vue 移动 ...

  2. Mac OS 修改hosts文件

    这里用得是 VI 编辑器修改 打开终端(应用程序——实用工具),运行: sudo vi /etc/hosts,此时屏幕上会提示你输入密码 打开 hosts 文件之后按 i 键进入插入模式(可理解为编辑 ...

  3. node.js入门基础

    内容: 1.node.js介绍 2.node.js内置常用模块 3.node.js数据交互 一.node.js介绍 (1)node.js特点 与其他语言相比,有以下优点: 对象.语法和JavaScri ...

  4. restful 注解 总结 (比较完整的):http://www.xuetimes.com/archives/388 , https://www.cnblogs.com/chen-lhx/p/5599806.html

    参考1:  http://www.xuetimes.com/archives/388 参考2:   https://www.cnblogs.com/chen-lhx/p/5599806.html 参考 ...

  5. leetcode748

    public class Solution { public string ShortestCompletingWord(string licensePlate, string[] words) { ...

  6. springVC + logback

    为什么用logback,而不是log4j? springmvc log只输出到console,不输出到文件 Spring MVC集成slf4j-logback springMVC如何配置logback ...

  7. DataSanp App与Rest, WebBroker App的区别

    DataSanp App与Rest, WebBroker App的区别 datasnap server :选择这一项,我们得到的将是一个独立EXE的三层服务器应用程序(TCP及HTTP两种模式) To ...

  8. liblas 1.8.1编译安装

    liblas https://github.com/libLAS/libLAS/issues/102 https://liblas.org/start.html 源码 https://github.c ...

  9. nginx+redis+4个tomcat 负载均衡

    1,先配置nginx ,如果80接口被占用,且80 的端口又惹不起,参考:https://www.cnblogs.com/xiaohu1218/p/10267602.html 2,下载redis,并配 ...

  10. homewor

    <jsp;include>动作和指令的区别: 一:执行时间上: <%@ include file=”relativeURI”%>                   是在翻译阶 ...