目录
- 参考源
- SQL create index 语句
- 索引
- 索引分类
- SQL 创建索引
- 示例数据
参考源
- 简单教程
- 菜鸟教程
SQL create index 语句
SQL create index
语句用于在表中创建索引
为什么使用索引:
在不读取整个表的情况下,索引使数据库应用程序可以更快地查找数据
索引有什么副作用:
索引会减慢数据插入和更新的速度
索引
创建索引的目的,也是唯一目的,就是加快数据的查询速度
用户无法看到索引,它们只能被用来加速搜索/查询
虽然索引有很多好处,但也是坏处多多
更新一个包含索引的表需要比更新一个没有索引的表花费更多的时间,这是由于索引本身也需要更新
因此,理想的做法是仅仅在常常被搜索的列 ( 以及表 ) 上面创建索引
索引分类
索引一般分为几大类: 主键索引
、唯一索引
、普通索引
- 普通索引允许重复的值,就是两个记录的索引字段的值可以重复
- 唯一索引不允许重复的值,两个记录的索引字段不允许重复,其实 主键索引 也是一种特殊的唯一索引
组合索引? 组合索引不属于它们,如果三个索引中包含了两个及以上字段,其实就是组合索引,不如组合主键索引
索引一般分为两大类:聚集索引
和 非聚集索引
聚集索引 就是表记录的排列顺序和索引的排列顺序一模一样
聚集索引,不会有单独的空间存储索引数据,而是在存储数据的时候就已经根据索引排好序
主键索引就属于 聚合索引
非聚集索引 用另外的空间存储了记录的顺序,但是记录本身的物理顺序可以和索引不一样
唯一索引 和 普通索引 都是非聚集索引
SQL 创建索引
- 创建普通索引
普通索引允许重复值
CREATE INDEX index_name ON table_name (column_name)
- 创建唯一索引
唯一索引不允许重复值,可以使用下面的 SQL 语句创建唯一索引
CREATE UNIQUE INDEX index_name ON table_name (column_name)
示例数据
CREATE DATABASE IF NOT EXISTS hardy_db default character set utf8mb4 collate utf8mb4_0900_ai_ci;
USE hardy_db;
DROP TABLE IF EXISTS lesson_views;
CREATE TABLE lesson_views (
uniq bigint(20) primary key NOT NULL default '0' ,
lesson_name varchar(32) default '',
lesson_id int(11) default '0',
date_at int(11) NOT NULL default '0',
views int(11) NOT NULL default '0'
);
INSERT INTO lesson_views(uniq,lesson_name,lesson_id,date_at,views) VALUES
(20170511000001,'Python 基础教程',1,20170511,320),
(20170511000002,'Scala 基础教程', 2,20170511,22),
(20170511000003,'Ruby 基础教程', 3, 20170511,49),
(20170512000001,'Python 基础教程',1,20170512,220),
(20170512000002,'Scala 基础教程',2,20170512,12),
(20170512000003,'Ruby 基础教程',3,20170512,63),
(20170513000001,'Python 基础教程',1,20170513,441),
(20170513000002,'Scala 基础教程',2,20170513,39),
(20170513000003,'Ruby 基础教程',3,20170513,87);
CREATE INDEX ix_lesson_views_date_at ON lesson_views (date_at);
CREATE INDEX ix_lesson_views_date_at ON lesson_views (date_at, lesson_id);