1. 索引的介绍

索引在MySQL中也叫做“键”,它是一个特殊的文件,它保存着数据表里所有记录的位置信息,更通俗的来说,数据库索引好比是一本书前面的目录,能加快数据库的查询速度。

应用场景:

当数据库中数据量很大时,查找数据会变得很慢,可以通过索引来提高数据库的查询效率。

2. 索引的使用

查看表中已有索引:

show index from 表名;

说明:

  • 主键列会自动创建索引

索引的创建:

-- 创建索引的语法格式
-- alter table 表名 add index 索引名[可选](列名, ..)
-- 给name字段添加索引
alter table classes add index my_name (name);

【主键会自动创建一个索引,外键约束这个字段也会自动创建一个索引】

说明:

  • 索引名不指定,默认使用字段名

索引的删除:

-- 删除索引的语法格式
-- alter table 表名 drop index 索引名
-- 如果不知道索引名,可以查看创表sql语句
show create table classes;
alter table classes drop index my_name;

【索引使用key标识,key表示给字段创建索引,提高了查询速度】

3. 案例-验证索引查询性能

创建测试表testindex:

create table test_index(title varchar(10));

向表中插入十万条数据:  【在pycharm中插入数据】

from pymysql import connectdef main():# 创建Connection连接conn = connect(host='localhost',port=3306,database='python',user='root',password='mysql',charset='utf8')# 获得Cursor对象cursor = conn.cursor()# 插入10万次数据for i in range(100000):cursor.execute("insert into test_index values('ha-%d')" % i)# 提交数据conn.commit()if __name__ == "__main__":main()

验证索引性能操作:【在终端验证】

-- 开启运行时间监测:
set profiling=1;
-- 查找第1万条数据ha-99999
select * from test_index where title='ha-99999';
-- 查看执行的时间:
show profiles;
-- 给title字段创建索引:
alter table test_index add index (title);
-- 再次执行查询语句
select * from test_index where title='ha-99999';
-- 再次查看执行的时间
show profiles;   【会显示对比效果】

4. 联合索引

联合索引又叫复合索引,即一个索引覆盖表中两个或者多个字段,一般用在多个字段一起查询的时候。

-- 创建teacher表
create table teacher
(id int not null primary key auto_increment,name varchar(10),age int
);-- 创建联合索引
alter table teacher add index (name,age);  【删除的话,和前面是一样的】

联合索引的好处:

  • 减少磁盘空间开销,因为每创建一个索引,其实就是创建了一个索引文件,那么会增加磁盘空间的开销。

5. 联合索引的最左原则

在使用联合索引的时候,我们要遵守一个最左原则,即index(name,age)支持 name 、name 和 age 组合查询,而不支持单独 age 查询,因为没有用到创建的联合索引。

最左原则示例:

-- 下面的查询使用到了联合索引
select * from stu where name='张三' -- 这里使用了联合索引的name部分
select * from stu where name='李四' and age=10 -- 这里完整的使用联合索引,包括 name 和 age 部分
-- 下面的查询没有使用到联合索引
select * from stu where age=10 -- 因为联合索引里面没有这个组合,只有 name | name age 这两种组合  【这个速度不会变快】

说明:

  • 在使用联合索引的查询数据时候一定要保证联合索引的最左侧字段出现在查询条件里面,否则联合索引失效

6. MySQL中索引的优点和缺点和使用原则

  • 优点:

    1. 加快数据的查询速度
  • 缺点:

    1. 创建索引会耗费时间和占用磁盘空间,并且随着数据量的增加所耗费的时间也会增加
  • 使用原则:

    1. 通过优缺点对比,不是索引越多越好,而是需要自己合理的使用。
    2. 对经常更新的表就避免对其进行过多索引的创建,对经常用于查询的字段应该创建索引,
    3. 数据量小的表最好不要使用索引,因为由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。
    4. 在一字段上相同值比较多不要建立索引,比如在学生表的"性别"字段上只有男,女两个不同值。相反的,在一个字段上不同值较多可是建立索引。

MySQL数据库中的索引相关推荐

  1. B+树:MySQL数据库中建立索引的数据结构

    在MySQL数据库中是通过B+树的数据结构建立索引的. 相比二叉树,B树是一种多叉树,总层数更少,磁盘io次数也会相应减少.而与B树不同的是,B+树把索引和数据分开存储,数据以链表的形式存放在B+树的 ...

  2. MySQL数据库中的索引(含SQL语句)

    文章目录 为什么要用索引 索引是什么 索引的原理 优点 缺点 创建索引的原则 什么情况下需要索引 什么情况下不需要索引 索引的分类 主键索引 单值索引 唯一索引 组合索引(复合索引) 全文索引(仅在M ...

  3. 第43讲:MySQL数据库中前缀索引的概念以及使用

    文章目录 1.前缀索引的概念 2.前缀索引的检索过程 3.前缀索引的使用 3.1.计算出应该取出多少个字符串作为前缀基数 3.2.创建前缀索引 3.3.使用前缀索引列查询数据. 1.前缀索引的概念 当 ...

  4. mysql 查询数据库索引语句_利用SQL语句查询数据库中所有索引

    本章我们就要讲解一下如何利用sql语句来查询出数据库中所有索引明细.当然了,我们可以在microsoft sql server management studio中选择"表"- & ...

  5. bd2和mysql语法区别,经验:在MySQL数据库中,这4种方式可以避免重复的插入数据!...

    最常见的方式就是为字段设置主键或唯一索引,当插入重复数据时,抛出错误,程序终止,但这会给后续处理带来麻烦,因此需要对插入语句做特殊处理,尽量避开或忽略异常,下面我简单介绍一下,感兴趣的朋友可以尝试一下 ...

  6. 在MySQL数据库中,这4种方式可以避免重复的插入数据!

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:小小猿爱嘻嘻 wukong.com/question/674 ...

  7. 查看MYSQL数据库中所有用户及拥有权限

    查看MYSQL数据库中所有用户 mysql> SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM m ...

  8. mysql 添加表索引_如何向MySQL表中添加索引?

    如何向MySQL表中添加索引? 我有一个非常大的MySQL表,包含大约15万行数据.目前,当我试着运行SELECT * FROM table WHERE id = '1'; 代码运行良好,因为ID字段 ...

  9. mysql source导入_读取MySQL数据库中的数据【Python数据分析百例连载】

    当所需的数据存贮在MySQL数据库中时,那么数据分析首要任务就是要通过Pandas读取MySQL数据.例如,某网站注册用户信息保存在MySQL数据库中,如图所示(部分数据),下面将使用Pandas的r ...

最新文章

  1. 阿里达摩院正式加入5G巨头仗:瞄准新基建,成立XG实验室,要与华为战一战
  2. Docker创建虚机和swarm
  3. 网络编程-HTTPS协议的实现原理
  4. 充分利用 UE4 中的噪声
  5. 云计算发展备受瞩目的五大方向
  6. 关于.net ashx一般处理文件中取不到session问题
  7. python遇到的问题
  8. 从0开始学习 GitHub 系列之「Git速成」
  9. Docker-registry + GlusterFS
  10. cocos2d-iphone 3.X 进度条的实现
  11. java xml字符串转换成对象_将XML字符串转换为对象
  12. Yolo3 实现目标检测
  13. PX4代码学习系列博客(1)——开发环境配置
  14. loadrunner视频资料地址-boobooke
  15. idea光标移至行尾快捷键——End键不能移至行尾的解决办法
  16. ollvm编译出现的问题纪录
  17. 2018年春招实习面试经验总结
  18. linux挂载ntfs格式分区,Linux上挂载NTFS分区(Mount)
  19. 关于no ‘read’ permission
  20. WFU校赛题解 B、C、F

热门文章

  1. Imagination推出全新多核GPU IP系列:提供33种不同配置,AI算力达24 TOPS
  2. 一文详解面向多级多模态场景的召回引擎
  3. 小团队如何玩转物联网开发?
  4. 教育部发文35所高校新增AI本科专业!想回去重新高考
  5. 清华人工智能研究院成立,张钹姚期智分别任院长和主任
  6. 想去苹果做AI?看看你够不够格
  7. AI一分钟 | 阿里云放大招要揽1000名AI人才,川普AI守国论遭遇54名科学家反对
  8. 小姐姐都能看懂的Happens-before规则,你还愣住了?
  9. Java8 快速实现List转map 、分组、过滤等操作
  10. 当我们在说微服务治理的时候究竟在说什么