一、索引的概念
利用关键字,就是记录的部分数据(某个字段,某些字段,某个字段的一部份),建立与记录位置的对应关系,就是索引。索引的关键字一定是排序的。 二、索引的类型
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. C#后台调用前台javascript的五种方法小结

    第一种,OnClientClick (vs2003不支持这个方法) <asp:Button ID="Button1" runat="server" Tex ...

  2. Python - Django - ORM 实例(二)

    在 app01/models.py 中添加 Book 类对象表 from django.db import models # Create your models here. # 出版社 class ...

  3. Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0

    Hadoop安装教程_单机/伪分布式配置_CentOS6.4/Hadoop2.6.0 环境 本教程使用 CentOS 6.4 32位 作为系统环境,请自行安装系统.如果用的是 Ubuntu 系统,请查 ...

  4. 搭建pyspider爬虫服务

    1. 环境准备 首先yum更新 yum update -y 安装开发编译工具 yum install gcc gcc-c++ -y 安装依赖库 yum install python-pip pytho ...

  5. ubuntu16.04安装python3,numpy,pandas等量化计算库

    ubunt安装python3 sudo add-apt-repository ppa:fkrull/deadsnakessudo apt-get updatesudo apt-get install ...

  6. JS - 函数,Math,number

    函数分为:关键字function 匿名函数 — 没有名字的函数 有名函数 — 有名字的函数 <body> <div></div> <script> // ...

  7. 动态html处理和及其图像识别

    爬虫(Spider),反爬虫(Anti-Spider),反反爬虫(Anti-Anti-Spider) 之间恢宏壮阔的斗争... Day 1 小莫想要某站上所有的电影,写了标准的爬虫(基于HttpCli ...

  8. 好久没玩laravel了,5.6玩下(二)

    做个项目的增删改查 第一步  把数据库的表结构建好,生成迁移 1 怎么建,当然是用php artisan命令了 使用 Artisan 命令 make:migration 来创建一个新的迁移: php ...

  9. B站上的一个MATLAB与神经网络的视频,捡漏

    ▶ av15514817.这里集中了一些从视频中学到的散点. ▶ 语句 "edit + 函数名" 可以打开部分内置函数的源代码.非公开的源代码这会打开一个全是注释的文档. ▶ 函数 ...

  10. DistCp 集群之间数据拷贝工具

    DistCp(分布式拷贝)是用于大规模集群内部和集群之间拷贝的工具.可以将数据拷贝到另个一集群,也可以将另一个集群的数据拷贝到本集群.