MySQL中间件(二):索引原理以及SQL优化


一、索引与约束

1. 什么是索引和约束?

索引是一种有序的存储结构,按照单个或者多个列的值进行排序,目的是提升搜索效率。
在MySQL中主要使用 B+ 树(InnoDB引擎)来组织索引;可理解为数据库中的“目录”或“书的页码”.

约束:为了实现数据的正确性完整性,innodb本身提供以下几种约束:primary key, unique key, foregin key, default, not null;

2. 约束与索引的区别?

创建主键索引 或者 唯一索引的时候 同时创建了相应的约束;
约束是逻辑上的概念,索引是一个数据结构既包含逻辑的概念也包含物理的存储方式。

索引常常用在筛选条件的场景适合使用,eg: where|group by |order by

以下场景不要使用:

1.没有 where/group by/ order by 的场景
2.区分度不高的列
3.经常修改的列
4.表数据量少

3. 索引分类 (案例理解)

  • 主键索引
    表的唯一标识,每张表只能有一个主键
    不能为空 (NOT NULL) 且唯一 (UNIQUE)
    创建主键索引时,MySQL自动建立索引(底层通常是B+树)
  • 唯一索引
    保证列值唯一,但允许为空(特殊场景除外)
    不作为主键,可以有多个唯一索引
    通常用于:手机号、邮箱、身份证号等
  • 普通索引
    仅加速查询速度,没有唯一性要求,key可以重复
    可以为经常用作条件查询(WHERE)的列加普通索引
  • 组合索引
    一个索引包含多个列,适合多列联合查询的场景
    遵循最左前缀原则(查询时条件必须从索引的最左列开始)
  • 全文索引
    用于全文搜索,适合大文本内容的搜索
    通常用于:文章、博客、产品描述等
-创建表时指定主键
CREATE TABLE users (
    id INT PRIMARY KEY,
    name VARCHAR(50)
);

--或者先创建表,再加主键
ALTER TABLE users ADD PRIMARY KEY (id);
----------------------------------------

-创建唯一索引
CREATE TABLE employees (
    emp_id INT,
    email VARCHAR(100) UNIQUE,
    phone VARCHAR(20),
    PRIMARY KEY (emp_id)
);

-- 或者后期添加唯一索引
ALTER TABLE employees ADD UNIQUE (email);
----------------------------------------

-创建普通索引
CREATE TABLE articles (
    id INT PRIMARY KEY,
    title VARCHAR(200),
    content TEXT
);

-- 给 title 添加普通索引
CREATE INDEX idx_title ON articl
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值