数据库系统原理
  • 数据库系统原理
  • 引言
    • 数据库系统概述
  • 关系模型介绍
    • 关系数据库结构
    • 数据库模式
    • 关系代数
      • 选择运算
      • 投影运算
      • 笛卡尔运算
      • 连接运算
      • 集合运算
      • 其他运算
  • SQL介绍
    • SQL语言分类
    • SQL数据类型
    • SQL数据库操作
    • SQL数据表操作
    • SQL数据操纵语言
    • SQL数据查询语言
    • 集合运算
    • 聚集函数
  • 中级SQL
    • 连接查询
    • 内连接
    • 外连接
    • 交叉连接和自连接
    • 视图
    • 完整性约束
    • SQL用户和授权
  • 高级SQL
    • 函数
    • 存储过程
    • 触发器
  • ER模式数据库设计
    • 数据库设计过程概览
    • 需求分析
    • 实体-联系模型
      • 复杂属性
      • 映射基数和弱实体集
    • 将E-R图转换为关系模式
    • E-R模型设计
  • 关系数据库设计
    • 数据库设计规范化
    • 函数依赖理论
    • 关系范式
  • 半结构化数据
    • 半结构化数据
  • 应用程序开发
    • ADO.NET访问数据库技术
    • 断开模式数据查询
    • 连接模式数据更新
  • 数据存储结构
    • 磁盘
    • 文件的存储
    • 文件的逻辑结构
    • 文件组织
  • 索引
    • 索引基本概念
    • B树索引
    • B+树索引
    • MySQL索引的基本语法
    • 联合索引
  • 查询处理
    • 查询处理概述
  • 查询优化
    • 查询优化概述
    • 查询树的启发式优化(代数优化算法)
  • 事务
    • 事务的概念
    • 事务的特性
    • MySQL事务处理
    • 可串行化
  • 并发控制
    • 并发控制概述
    • 封锁
    • 两阶段封锁协议封锁
    • 多粒度封锁
    • 活锁和死锁
    • 基于时间戳排序的并发控制
    • 乐观控制法
  • 恢复系统
    • 数据库恢复概述
    • 数据库恢复的实现技术
    • 基于检查点的数据库恢复
Powered by GitBook
On this page
  • 创建表时
  • 表已经存在时
  • 索引的生效
  1. 索引

MySQL索引的基本语法

定义主键约束、外键约束、唯一约束等约束时,相当于同时在指定列上创建了一个索引。

创建表时

create table table_name(
		[col_name data_type] [unique | fulltext | spatial...],
		[unique ...][index | key][index_name] (col_name [length], ...)
);
create table user (
		id int not null,
		name char(30) not null,
		unique index uniqueIdx(id)
	);

表已经存在时

第一种

alter table table_name
		add [unique ...][index | key][index_name](col_name [length], ...);

alter table user add unique index uniqueIdx(id);

第二种

create [unique...] index index_name
		on table_name (col_name [length], ...);

create unique index uniqueIdx on user(id);

删除索引

drop index index_name on table_name;

查看MySQL中的索引

show keys from table_name

索引的生效

  • 只要创建了索引,就一定会生效吗?

不一定,当使用组合索引时,如果没有遵循最左匹配原则,索引不生效。

例如,创建id,name,age 组合索引时:

  • id 、(id, name) 、(id, name, age) 查询,索引生效

  • age 、(age, name) 查询,索引不生效

  • 这样判断索引是否生效

    使用explain 关键字。

  • possible_keys :MySQL在搜索记录时可选用的各个索引

  • key :MySQL实际选用的索引

怎么避免索引失效?

  • 使用组合索引时,遵循最左匹配原则

  • 不在索引列上进行任何操作,比如:计算、函数、类型转换

  • 尽量使用覆盖索引索引列,尽量不使用不等于条件!= / <>、通配符开头的模糊查询(like %abc)、or作为连接条件

  • 字符串加单引号(不加可能会发生索引列的隐式转换,导致索引失败)

PreviousB+树索引Next联合索引

Last updated 4 months ago