MySQL常用索引
2016-04-10 本文已影响0人
everKarma
1.主键索引
- 主键索引必定是唯一索引,且不允许空值
create table `example1` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例1';
2.唯一索引
- 除开取值唯一以外,与普通索引没有区别
create table `example2` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
`student_id` int unsigned NOT NULL DEFAULT 0 COMMENT '学号',
PRIMARY KEY (`id`),
UNIQUE KEY `uniq_sid` (`student_id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例2';
3.普通索引
- 建立索引应在区分度大的字段上,不要在低基数列上建立索引,比如 性别
create table `example3` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
`student_id` int unsigned NOT NULL DEFAULT 0 COMMENT '学号',
`grade` int unsigned NOT NULL DEFAULT 0 COMMENT '分数',
PRIMARY KEY (`id`),
KEY `idx_grade` (`grade`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例3';
4.组合索引
- 区分度大的列放在前,有范围性的列放在后
- 联合索引
(a, b, c)
相当于(a)
,(a, b )
,(a, b, c)
- 合理使用索引覆盖减少IO,避免排序
- 单个索引字段不应超过5个
create table `example3` (
`id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增id',
`student_id` int unsigned NOT NULL DEFAULT 0 COMMENT '学号',
`grade` int unsigned NOT NULL DEFAULT 0 COMMENT '分数',
`create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
PRIMARY KEY (`id`),
KEY `idx_sid_grede_ctime` (`student_id`, `grade`, `create_time`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='示例3';