MySQL
索引
- 索引的概念
- 在关系数据库中,索引是一种单独的、物理的对数据库表中一列或多列的值进行排序的一种存储结构,它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录,可以根据目录中的页码快速找到所需的内容。
- 索引使用场景
- 适用于日常业务中,查询占得比重比较大的操作
索引创建的基本原则
- 比较频繁的作为查询条件的字段
- 唯一性太差的字段不适合作为单独创建的索引,即使它被频繁作为查询条件
- 更新频繁的字段不能作为索引
- 不会出现在where子句中的字段不该创建索引
索引实现
采用的结构
-
搜索树
- 搜索树 (B树系列)时间复杂度(O(log(n)))
检索效率和高度有关
可以提供有序性
相比较二叉搜索树,高度更低
- 搜索树 (B树系列)时间复杂度(O(log(n)))
-
哈希(hash)散列表
- 哈希(hash)散列表
检索率高 时间复杂度(O(1))
但是无序
- 哈希(hash)散列表
索引的几种形式
* **主键 (Primary Key)**
-- I
create table Teacher(
id int,
name varchar(20),
primary key (id);
-- II
create table Teacher(
id int primary key,
name varchar(20);
-- III
create table Teacher(
id int,
name varchar(20),
-- 创建多字段的主键
primary key (id,name);
-- IIII 追加主键
create table Teacher(
id int,
name varchar(20);
alter table Teacher add primary key(id);
- 唯一键 (Unique)
create table Teacher(
id int primary key,
name varchar(20) unique;
create table Teacher(
id int primary key,
name varchar(20),
unique (name);
-- 追加唯一键
alter table Teacher add unique (name);
- 普通索引 (Key|Index)
create table Teacher(
id int primary key,
name varchar(20),
gender varchar(4),
unique (name),
index (gender);
create table Teacher(
id int primary key,
name varchar(20),
gender varchar(4),
unique (name);
-- 追加
alter table Teacher add index (gender);
-- 直接创建
create index idx_gender on Teacher(gender);
- 全文索引 (FULLTEXT
极少使用
CREATE TABLE articles (
id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,
title VARCHAR(200),
body TEXT,
FULLTEXT (title,body)
)engine=MyISAM;
查询索引
show keys from Teacher\G;
show index from Teacher\G;
索引的删除
alter table Teacher drop primary key;
alter table Teacher drop index idx_gender;
查看索引是否命中
- 关键字: explain
- 使用
explain select * from EMP where deptno = 10\G;