mysql的索引以及优化

摘要:
索引可以提高查询速度。|主键索引如果字段是主键,MySQL将自动在该字段上创建主键索引|唯一索引如果通过唯一索引找到字段的值,它与主键索引的不同之处在于主键索引必须建立在主键上|如果普通索引建立在非主键且其值不唯一的字段上,当使用多个字段一起构建索引时。
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。

QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19)    QQ:1542385235

什么是索引:当你在字典中查找你的名字的时候,你有两种方式。第一、一页一页的翻,第二、通过拼音、笔画,等查找。那么第二种方式就是通过索引的方式查找。那么在myslq中数据库也是这么干的。索引可以增加查询速度,但是同时mysql维护索引也需要耗费性能。

索引的分类:

| 主键索引

如果一个字段为主键(primary key),则mysql会自动在该字段上建立主键索引

| 唯一索引

如果一个字段的值,在整张表中是唯一的,那么就可以在该字段上建立唯一索引,一旦通过唯一索引查找到了数据,就不需要继续查找了,因为它唯一的。它与主键索引的区别是主键索引必须建立在 主键上。

| 普通索引

如果在一个不是主键、其值不是唯一的字段上建立索引,则此类索引就是普通索引。

| 全文索引

如果在某个字段上建立了全文索引,则mysql会将该字段内的值,它认为是关键字的字眼抽取出来,然后对每个关键字建立索引,这就是全文索引。注意:全文索引需要myisam引擎支持。

| 复合索引

我们在建立索引的时候,可以针对多个字段,一起建立索引。当使用多个字段在一起建立索引时,此类索引为复合索引。

建立唯一索引或全文索引:

语法1: create  [unique|fulltext]  index index_name on table_name (table_ field);

例:地方在goods表的goods_name字段上建立了一个名为goods_name的普通索引。

mysql的索引以及优化第1张

建立普通索引或复合索引:

语法2:alter tabel table_name add index index_type index_name (field);

例:

mysql的索引以及优化第2张

查询索引:

语法:

1、show index from table_name;
2、show keys from table_name;

例:

mysql的索引以及优化第3张

mysql的索引以及优化第4张

删除索引:

语法1:drop index index_name on table_name;

例:

mysql的索引以及优化第5张

语法2:alter table table_name drop index index_name;

例:

mysql的索引以及优化第6张

测试索引效果:

语法:explain select语句;

例:

没有索引的情况:

 mysql的索引以及优化第7张

mysql的索引以及优化第8张

有索引的情况:

mysql的索引以及优化第9张

mysql的索引以及优化第10张

select_type查询类型,说明

mysql的索引以及优化第11张

Type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为 const、eq_reg、ref、range、index和ALL

all:full table scan ;mysql将遍历全表以找到匹配的行;
index:index scan; index 和 all的区别在于index类型只遍历索引;
range:索引范围扫描,对索引的扫描开始于某一点,返回匹配值的行,常见与between ,< ,>等查询;
ref:非唯一性索引扫描,返回匹配某个单独值的所有行,常见于使用非唯一索引即唯一索引的非唯一前缀进行查找;
eq_ref:唯一性索引扫描,对于每个索引键,表中只有一条记录与之匹配,常用于主键或者唯一索引扫描;
const,system:当mysql对某查询某部分进行优化,并转为一个常量时,使用这些访问类型。如果将主键置于where列表中,mysql就能将该查询转化为一个常量。
索引的坏处:
| 占据磁盘空间。有时候索引的大小要大于数据的大小。
| 减慢了数据插入和删除的速度。因为每次插入和删除的时候都需要更新索引,一个表拥有的索引越多,则写操作的平均性能下降就越大。
| 造成存储碎片的问题。当删除一条记录时将会导致对应的索引中的该记录一的对应项为空,由于索引是采用 B 树结构存储的,所以对应的索引项并不会被删除,经过一段时间的增删改操作后,数据库中就会出现大量的存储碎片。存储碎片不但占据磁盘空间,还降低数据库性能。
 
 
本人qq群也有许多的技术文档,希望可以为你提供一些帮助(非技术的勿加)。

QQ群:   281442983 (点击链接加入群:http://jq.qq.com/?_wv=1027&k=29LoD19)    QQ:1542385235

我的淘宝店,可以进去逛逛噢:https://shop108912636.taobao.com/index.htm?spm=2013.1.w5001-7867000954.3.1d29318dPlLar7&scene=taobao_shop

免责声明:文章转载自《mysql的索引以及优化》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇C#上传视频等大文件Windows: 在系统启动时运行程序、定时计划任务、定时关机下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

转载 java枚举类型enum的使用 (原文地址:http://blog.csdn.net/wgw335363240/article/details/6359614)

java枚举类型enum的使用 最近跟同事讨论问题的时候,突然同事提到我们为什么java中定义的常量值不采用enmu枚举类型,而采用public final static 类型来定义呢?以前我们都是采用这种方式定义的,很少采用enum定义,所以也都没有注意过,面对突入起来的问题,还真有点不太清楚为什么有这样的定义。既然不明白就抽时间研究下吧。 Java中的...

Mysql 查询以某个字符开头的语句

要查询以某个字符开头的数据,在Mysql中常常用到。常用的语句有: 下面以查询文章标题以“正”字开头的语句为例: 1:使用通配符: 1 SELECT * FROM `article` where title like '正%'; 2:使用left函数: 1 SELECT * FROM `article` where left(title,1)=...

excel文件使用navicat工具导入mysql的方法

1、在excel文件的sheet上,第1行下面插入一行,对应DB里面的字段名称,方便后面导入时做字段匹配: 2、使用Navicat ,打开工具,选择表所在的数据库,然后点击数据库名字,右键Tables,出来下拉菜单选择import wizard(中文版:导入向导).弹出一个选择界面,选择excel file文件 3、点击next(下一步),选择对应...

DataX环境配置

摘要: DataX(3.0)配置过程 配置过程以及插件配置 1、DataX(3.0)地址:https://github.com/alibaba/DataX 官方提供的配置需求:本例使用了JDK1.8 Python使用了CentOS预装的版本。 System Requirements: Linux、Windows JDK(1.6以上,推荐1.6) P...

Wireshark——过滤器

一、捕获过滤器 选中捕获选项后,就会弹出下面这个框,在红色输入框中就可以编写过滤规则。 1)捕获单个IP地址 2)捕获IP地址范围 3)捕获广播或多播地址 4)捕获MAC地址 5)捕获所有端口号 6)捕获特定ICMP数据 当网络中出现性能或安全问题时,将会看到ICMP(互联网控制消息协议)。 在这种情况下,用户必须使用一个偏移量表示一个ICMP...

MyCat 的入门和放弃

一、MyCat分库原理 1、非分片字段查询 Mycat中的路由结果是通过分片字段和分片方法来确定的。例如下图中的一个Mycat分库方案: 根据 tt_waybill 表的 id 字段来进行分片 分片方法为 id 值取 3 的模,根据模值确定在DB1,DB2,DB3中的某个分片 如果查询条件中有 id 字段的情况还好,查询将会落到某个具体的分片。例如:...