MySQL常用索引

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';
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容