mysql笔记(四)--索引

文章目录

(一) mysql笔记–基本概念
(二) mysql笔记–基本操作
(三) mysql笔记–事务
(四) mysql笔记–索引
(五) mysql笔记–其他操作
(六) mysql笔记–锁

4. 索引

    索引的作用就是加速查找,查询数据库时不直接读取硬盘(前提要命中索引),每条索引的建立需要创建索引文件,所以索引影响插入删除速度

4.1 索引类型及存储

无索引:从前到后依次查找
索引类型:

  • 主键索引:加速查找 + 不能为空 + 不能重复
  • 普通索引:加速查找
  • 唯一索引:加速查找 + 不能重复
  • 联合索引(多列):
  • 联合主键索引
  • 联合唯一索引
  • 联合普通索引

索引存储格式:

  1. hash索引:
    单值查询速度快
    范围查询慢
  2. btree索引:
    btree索引(常用),由于硬盘的读取慢,使用块读取
    二叉树,数的深度太高影响性能
4.2 索引的建立
  • a. 额外的文件保存特殊的数据结构、
  • b. 查询快;插入更新删除慢
  • c. 命中索引,一般使用常用且是数值的作为索引
    select * from userinfo3 where email=‘asdf’;
    select * from userinfo3 where email like ‘asdf’; 慢
  1. 主键索引:
  • 默认有,且比较特殊
  1. 普通索引
  • create index 索引名称 on 表名(列名,)
  • drop index 索引名称 on 表名
  1. 唯一索引:
  • create unique index 索引名称 on 表名(列名)
  • drop unique index 索引名称 on 表名
  1. 组合索引(最左前缀匹配):
  • create unique index 索引名称 on 表名(列名,列名)

  • drop unique index 索引名称 on 表名

  • create index ix_name_email on userinfo3(name,email,)

    遵循最左前缀匹配原则

	select  * from userinfo3 where name='alex';
	select  * from userinfo3 where name='alex' and email='asdf';

    以下则不命中索引

	select  * from userinfo3 where email='alex@qq.com';
  • 组合索引效率 > 索引合并
    组合索引:
	-- (name,email,)联合索引
		select  * from userinfo3 where name='alex' and email='asdf';

        索引合并

	-- name索引
	-- email索引
		select  * from userinfo3 where name='alex' and email='asdf';
4.3 索引命中

覆盖索引

  • 在索引文件中直接获取数据,即直接select索引

索引合并

  • 把多个单列索引合并使用,使用条件and俩索引

以下情况不命中索引:

    设nid,email建立了索引

  1. 使用通配符 like ‘%xx’
	select * from tb1 where email like '%cn';
  1. 使用函数
	select * from tb1 where reverse(email) = 'asdf';
  1. 使用or
	select * from tb1 where nid = 1 or name = 'seven@live.com';

	--特别的:当or条件中有未建立索引的列才失效,以下会走索引
	select * from tb1 where nid = 1 or name = 'seven';
	select * from tb1 where nid = 1 or name = 'seven@live.com' and email = 'alex'
  1. 类型不一致
    如果列是字符串类型,传入条件是必须用引号引起来,否则不命中
	select * from tb1 where email = 999;
  1. 不等于 !=
	select * from tb1 where email != 'alex'
	
	--特别的:如果是主键,则还是会走索引
	select * from tb1 where nid != 123
  1. 比较 >
	select * from tb1 where email > 'alex'
	
	--特别的:如果是主键或索引是整数类型,则还是会走索引
	select * from tb1 where nid > 123
	select * from tb1 where num > 123
		
  1. 排序 order by
	select name from tb1 order by email desc;
	
	当根据索引排序时候,选择的映射如果不是索引,则不走索引
	特别的:如果对主键排序,则还是走索引:
	select * from tb1 order by nid desc;
  1. 不遵循 组合索引最左前缀
	如果组合索引为:(name,email)
	同时查询 name and email       -- 使用索引
	单独查询 name                 -- 使用索引
	单独查询 email                -- 不使用索引
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
CSDN是一个技术交流平台,里面有许多关于各种编程语言和数据库的学习资料和笔记。而MySQL是其中一种常用的关系型数据库管理系统,也是开放源代码软件之一。 在CSND上,MySQL笔记是指关于MySQL数据库的学习和使用的笔记和教程。这些笔记包含了MySQL数据库的基本概念、安装配置、SQL语句的使用、数据表的设计和管理、索引使用、数据备份和恢复等方面的知识。学习MySQL笔记可以帮助开发者更好地理解和应用MySQL数据库。 MySQL笔记主要可以分为以下几个方面来介绍和学习: 1. 数据库基础知识:学习数据库的基本概念和原理,了解关系型数据库的特点以及MySQL的特点。 2. 安装和配置:学习如何在不同操作系统上安装和配置MySQL数据库,包括设置用户名、密码和端口等。 3. SQL语句的使用:学习SQL语句的基本语法和常用命令,包括查询、插入、更新、删除等操作。 4. 数据表的设计和管理:学习如何设计和创建数据表,包括选择适当的数据类型、设置主键和外键等。 5. 索引的使用:学习如何创建和使用索引来提高查询效率和数据访问速度。 6. 数据备份和恢复:学习如何进行MySQL数据库的数据备份和恢复,包括全量备份和增量备份等。 通过学习MySQL笔记,开发者可以掌握MySQL数据库的基本操作和高级功能,提高数据管理和查询的效率。此外,还可以了解MySQL数据库的优化技巧和性能调优方法,提升数据库的性能和稳定性。 总之,通过CSDN上的MySQL笔记,开发者可以系统地学习和掌握MySQL数据库的相关知识,从而更好地应用于实际的项目开发中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值