`

MySql索引知识点整理(一)

阅读更多
(一)概述
1.索引的作用:相当于数据的目录,用于提高查询速度
2.索引的原理、如何起作用的:所谓索引就是为特定的mysql字段(一个或多个)进行一些特定的算法排序,常用的排序算法有二叉树的算法和哈希算法
 
(二)索引分类
INDEX普通索引
施加的字段值允许重复
UNIQUE唯一索引
施加的字段不可重复,但可以有NULL值。
PRIMARY KEY主键索引
施加的字段不允许出现相同的值,且不能为NULL值,一个表只能有一个primary_key索引。设置主键约束时自动添加
fulltext index 全文索引
上述三种索引都是针对列的值发挥作用,但全文索引,可以针对值中的某个单词,比如一篇文章中的某个词,只有myisam以及英文支持,并且效率让人不敢恭维,很少会使用,可暂时忽略
*组合索引:在多个字段的组合上增加索引,索引类型为上述4中方式
 
(三)索引的增删改查(CRUD)
索引也是数据库中的一种数据库对象,对其的CRUD通用使用DDL语句。
1.创建索引
1)在建表时同时创建,比如:
CREATE TABLE `test1` ( `id` smallint(5) UNSIGNED AUTO_INCREMENT NOT NULL, -- 注意,下面创建了主键索引,这里就不用创建了 `username` varchar(64) NOT NULL COMMENT '用户名', `nickname` varchar(50) NOT NULL COMMENT '昵称/姓名', `intro` text, PRIMARY KEY (`id`), UNIQUE KEY `unique1` (`username`), -- 索引名称,可要可不要,不要就是和列名一样 KEY `index1` (`nickname`), FULLTEXT KEY `intro` (`intro`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COMMENT='后台用户表';
 
2)修改表结构时创建(针对表已经存在的情况)。语法:
ALTER TABLE 表名 ADD 索引类型 (unique,primary key,fulltext,index)[索引名](字段名)
比如:
ALTER TABLE `table_name` ADD INDEX `index_name` (`column_list`) -- 索引名,可要可不要;如果不要,当前的索引名就是该字段名。 ALTER TABLE `table_name` ADD UNIQUE (`column_list`) ALTER TABLE `table_name` ADD PRIMARY KEY (`column_list`) ALTER TABLE `table_name` ADD FULLTEXT KEY (`column_list`)
 
3)直接使用create语句单独创建索引并施加到表上
*注意:此种方式只可对表增加普通索引或UNIQUE索引
CREATE INDEX index_name ON table_name (column_list) CREATE UNIQUE INDEX index_name ON table_name (column_list)
 
2.查询某个表所有的索引
show index from 表名;
 

 
3.删除索引
1)方式1:直接用drop语句删
DROP INDEX `index_name` ON `talbe_name`
2)方式2:修改表结构的时候删 ALTER TABLE `table_name` DROP INDEX `index_name`
 
4.修改索引:删了重建
 
5.组合索引(是一种使用索引的技巧,不属于标准的索引类型)
由于增加了匹配条件的维度,所以通常会比单字段索引更能提升效率
ALTER TABLE `myIndex` ADD INDEX 组合索引名 (字段1,字段2...);
注意字段顺序,mysql 组合索引遵循 “最左前缀”匹配规则。简单的理解就是只从最左面的开始组合。并不是只要包含索引施加的所有字段的组合查询都会用到该组合索引
比如:创建了一个name,city,age的组合索引name_city_age(vc_Name(10),vc_City,i_Age)
下面几句sql可以用上组合索引:
SELECT * FROM myIndex WHREE vc_Name=”erquan” AND vc_City=”郑州”
SELECT * FROM myIndex WHREE vc_Name=”erquan”
下面几句sql查询时组合索引将失效:
SELECT * FROM myIndex WHREE i_Age=20 AND vc_City=”郑州”
SELECT * FROM myIndex WHREE vc_City=”郑州”
即:name_city_age(vc_Name(10),vc_City,i_Age) 是左到右进行索引,如果第一个查询字段不是vc_name也就是没有左前索引Mysql不执行索引查询
(四)设置索引所遵循的一些法则(面试容易问)
  1. 为维度高的列创建索引。
    • 维度指的是数据列中不重复值出现的个数,这个数量越高,维度就越高。
    • 如某个字段在8行数据中的值分别为a,b ,c,d,a,b,c,d这个表的维度为4。
    • 性别这样的低纬度列不适合创建索引
  1. 对 where,on,group by,order by 中出现的列使用索引。
  2. 对数量较小的数据列使用索引会使索引文件更小,节省空间和性能。
  3. 根据实际需求可以使用组合索引,一方面减少文件索引大小,另一方面在使用时速度要优于多个单列索引。注意组合索引的前缀匹配。
  4. null值太多的列不适合建索引。复合索引中只要有一列含有null值,那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。
  5. 在索引列上进行运算(比如使用函数)将导致索引失效而进行全表扫描,例如
SELECT * FROM table_name WHERE YEAR(column_name)<2017
7. not in和<>操作会导致索引失效
8.like语句对索引使用的影响:
like “aaa%”可以使用索引
like “%aaa%” 不会使用索引
9.不要过多创建索引,除了增加额外的磁盘空间外,对于DML操作的速度影响很大,因为其每增删改一次就得从新建立索引。
(五)使用explain(执行计划)观察索引是否生效
EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mysql如何使用索引来处理select语句以及连接表,可以帮助选择更好的索引和写出更优化的查询语句。
使用方法:在select语句前加上explain就可以了,比如:
explain select * from blog where false;
 
例1:没有查询条件,返回所有字段--全表扫描没有使用索引


 
例2:没有查询条件,返回设置了索引的单个字段,使用到了索引(这里实际上启用了启用了覆盖索引


 
 
例3:没有查询条件,返回设置了组合索引的两个字段,使用到了组合索引(这里实际上启用了启用了覆盖索引


 
 
例4:没有查询条件,返回字段列表中包含了组合索引以外的字段(无论此字段上是否施加索引),均不能用到索引,全表扫描


 
 
例5:以主键字段为查询条件,无论返回所有字段还是部分字段,均使用到了主键索引


 
 
例6:以施加索引的单个字段为精确查询条件,可以使用到索引


 
例7:以施加组合索引的多个字段为精确查询条件,可以使用到索引


 
但是如果组合索引最左边的字段没有出现在查询条件中,即使有其他字段出现,索引也无效


 
例8:关联条件中使用or操作,索引无效


 
例9:使用in操作符以主键字段作为查询条件,使用到索引


 
例10:使用not in操作符以主键字段作为查询条件,未使用索引


 
 
例11:使用like模糊查询,左右两端都有通配符,索引无效


 
例12:使用like模糊查询,只有左端有通配符,索引无效


 
例13:使用like模糊查询,只有右端有通配符,索引有效


 
 
(六)小结
不要盲目的创建索引,只为查询频繁且增删改很少的列创建索引,创建索引会使查询操作变得更加快速,但是会降低增加、删除、更新操作的速度,因为执行这些操作的同时会对索引文件进行重新排序或更新。
但是,在很多应用中,查询的语句远远大于DML的语句,甚至可以占到80%~90%,所以也不要太在意,只是在大数据导入时,可以先删除索引,再批量插入数据,最后再添加索引。

 

  • 大小: 44.3 KB
  • 大小: 13.1 KB
  • 大小: 14.1 KB
  • 大小: 10.9 KB
  • 大小: 15.1 KB
  • 大小: 11.7 KB
  • 大小: 11.9 KB
  • 大小: 12.6 KB
  • 大小: 12.6 KB
  • 大小: 12.4 KB
  • 大小: 10.2 KB
  • 大小: 15.2 KB
  • 大小: 21.7 KB
  • 大小: 13.7 KB
  • 大小: 13.5 KB
分享到:
评论

相关推荐

    mysql知识点整理

    MySQL知识点整理 MySQL是目前最流行的开源关系数据库管理系统之一,它的知识点体系非常庞大。下面我们将对MySQL的知识点进行整理和详细解释。 数据类型 MySQL中的数据类型可以分为五大类:数值型、字符串类型、...

    mysql知识点整理收藏

    ### MySQL知识点整理:SQL语句优化 #### 一、引言 MySQL作为一款广泛使用的开源关系型数据库管理系统,其性能优化一直是数据库管理中的重要议题。本文档主要关注于SQL语句层面的优化策略,旨在通过改善SQL语句的...

    【mysql知识点整理】 — mysql索引底层数据结构

    4.2.1 B树数据结构4.2.2 B+树数据结构,以及为什么选择B+树4.2.3 一个错误的观点:B树和B+树的区别之一为B树的非叶子节点存储数据4.3 简单猜想:为什么索引中每个节点在内存中的地址是随机的5 MySQL索引的体现形式...

    mysql中创建各种索引的语句整理知识.pdf

    Mysql 中创建各种索引的语句整理知识 索引是关系数据库管理系统中的一种数据结构,能快速地定位特定的数据,提高查询效率。在 MySQL 中,创建索引的语句有多种,下面将对这些语句进行整理和解释。 一、索引的创建...

    Mysql相关知识学习整理.zip

    本文将深入探讨MySQL的核心概念、安装与配置、数据类型、SQL语句、索引优化、存储引擎、事务处理以及备份与恢复等关键知识点。 一、MySQL核心概念 MySQL是一个开源、免费的数据库系统,它采用SQL(结构化查询语言)...

    mysql索引分析以及常见问题

    索引相关知识点整理以及问题分析

    JAVA核心知识点整理

    综上所述,"JAVA核心知识点整理"涵盖了Java开发的各个方面,从基础到高级,从理论到实践,是成为一名专业Java开发者所必须掌握的内容。通过深入学习并实践这些知识点,将有助于提升个人技能,应对各种开发挑战。

    整理MYSQL中关于索引的相关面试题集

    本篇文章将详细讲解MySQL中关于索引的相关知识点,包括索引的数据结构及其优劣,以及如何查看和分析SQL执行计划。 1. **索引的数据结构** - **哈希索引**:适用于单条记录查询,哈希索引通过哈希函数将键值转化为...

    mysql优化精华整理文档

    MySQL优化精华整理文档是针对数据库性能提升的一份详细指南,涵盖了多个关键方面,旨在帮助管理员和开发者提升数据库的运行效率。以下是对各个知识点的详细解释: 1. **我们可以且应该优化什么?** - 优化的目标...

    MySQL实战优化-整理版

    ### MySQL实战优化知识点详解 #### 1. MySQL整体架构设计 - **概念解析**:MySQL是一种关系型数据库管理系统,其架构主要包括服务器层、存储引擎层等。服务器层负责处理SQL语句、管理权限验证等;存储引擎层则具体...

    Java面试知识点整理总结

    Java面试知识点整理总结涵盖了多个关键领域,这对于求职者或希望提升技术能力的Java开发者来说是宝贵的资源。以下是对这些主题的详细阐述: 1. **Java基础**:这是学习任何编程语言的基础,包括变量、数据类型、...

    MySQL高级面试题整理及答案.md

    MySQL高级面试题整理及答案.md 是一个包含MySQL高级面试题及其答案的Markdown文档。该资源旨在帮助开发者更好地了解MySQL的高级特性和应用,提高面试通过率。 内容概要: MySQL高级面试题:该资源包含了MySQL的...

    MYSQL读书笔记整理

    3. **其他MySQL知识点** - **存储过程和触发器**:存储过程可以封装复杂的业务逻辑,提高代码复用,而触发器则可以在特定事件(如INSERT、UPDATE或DELETE)发生时自动执行某些操作。 - **视图**:视图是虚拟表,...

    整理mysql数据库的28个知识点.docx

    以下是对整理的28个MySQL知识点的详细说明: 1. **MySQL复制原理**:MySQL的复制主要涉及三个线程:主服务器的binlog线程记录所有改变数据库数据的语句;从服务器的IO线程负责从主服务器拉取binlog内容并存入relay ...

    Mysql面试题详解(个人整理)

    面试中,MySQL的知识点涵盖了从基础到高级的各种主题,包括但不限于数据库引擎的选择、事务处理、锁机制、索引优化、存储结构以及数据恢复策略等。以下是对这些重要知识点的详细解释: 1. **MySQL常用引擎**: - *...

    MySQL面试题资源整理

    以下是一系列关于MySQL的面试题和相关知识点,帮助你深入理解这个强大的数据库系统。 1. **SQL基础** - 什么是SQL?SQL(Structured Query Language)是用于管理关系数据库的标准语言。 - 描述一下SQL的基本操作...

    MySQL参考手册(个人整理)

    手册通常会涵盖以下主要知识点: 1. **安装与配置**:包括如何在不同的操作系统上安装MySQL,以及如何设置服务器参数以优化性能。 2. **SQL语法**:讲解了标准的SQL语句,如SELECT、INSERT、UPDATE和DELETE,以及...

    php操作mysql数据库流程整理

    ### PHP 操作 MySQL 数据库流程详解 #### 一、引言 PHP 作为一种广泛使用的脚本语言,在 Web 开发领域有着不可替代的地位。...以上就是 PHP 操作 MySQL 数据库的基础流程和相关知识点。希望对初学者有所帮助!

    mysql面试题 pdf整理版内容节选

    以下是从“mysql面试题 pdf整理版内容节选”中提炼出的一些关键知识点: 1. **SQL基础**: - SQL(结构化查询语言)用于管理和操作数据库,包括CRUD(创建、读取、更新和删除)操作。 - 数据类型:了解如INT、...

Global site tag (gtag.js) - Google Analytics