MySQL 索引

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。

一. 普通索引

作用:加速查找

# 1.创建表时直接创建索引
create table user(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name (name)        # ix_name 索引名,括号后面指定索引所在的列
);

# 2.创建表后再创建索引
create index ix_name on user(name);
#注意:对于创建索引时如果是BLOB 和 TEXT 类型,必须指定length,例如使用列名称的前10个字符:
create index ix_extra on user(extra(10));

# 3.删除索引
drop ix_name on user;

# 4.查看索引
show index from user;

二. 唯一索引

作用:加速查找,约束列数据不能重复,数据可以为 null

# 1.创建表时直接创建唯一索引
create table user(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    unique ix_name (name)        
);

# 2.创建表后再创建唯一索引
create  unique index ix_name on user(name);

# 3.删除唯一索引
drop unique ix_name on user;

三. 主键索引

作用:加速查找,约束列数据不能重复,数据不能为 null

# 1.创建表时直接创建主键索引
create table user(
    nid int not null auto_increment primary key,    # 指定 nid 为主键索引
    name varchar(32) not null,
    email varchar(64) not null,
    extra text      
);

# 2.创建表后添加主键索引
alter table user add primary key(nid);

# 3.删除主键索引
alter table user drop primary key;

四. 组合索引

作用:多列可以创建一个索引文件

# 1.创建组合索引
create table user(
    nid int not null auto_increment primary key,   
    name varchar(32) not null,
    email varchar(64) not null,
    extra text      
);

# 将 name 和 email 两列组合成一个索引
create index ix_name_email on user(name,email);

# 组合索引遵循最左前缀,即 where条件必须跟 name 列才会使用索引。

覆盖索引

只需要在索引表中就能获取到数据。

合并索引

# 有两个单独的索引,搜索时使用两个索引
create table user(
    nid int not null auto_increment primary key,
    name varchar(32) not null,
    email varchar(64) not null,
    extra text,
    index ix_name(name) ,
    index ix_email(email)
);

select * from user where name = 'klvchen' or email = 'klvchen@126.com'; 

使用索引注意事项

  • 避免使用select *
  • count(1)或count(列) 代替 count(*)
  • 创建表时尽量时 char 代替 varchar
  • 表的字段顺序固定长度的字段优先
  • 组合索引代替多个单列索引(经常使用多个条件查询时)
  • 尽量使用短索引
  • 使用连接(JOIN)来代替子查询(Sub-Queries)
  • 连表时注意条件类型需一致
  • 索引散列值(重复少)不适合建索引,例:性别不适合
内容概要:本文档主要展示了C语言中关于字符串处理、指针操作以及动态内存分配的相关代码示例。首先介绍了如何实现键值对(“key=value”)字符串的解析,包括去除多余空格和根据键获取对应值的功能,并提供了相应的测试用例。接着演示了从给定字符串中分离出奇偶位置字符的方法,并将结果分别存储到两个不同的缓冲区中。此外,还探讨了常量(const)修饰符在变量和指针中的应用规则,解释了不同类型指针的区别及其使用场景。最后,详细讲解了如何动态分配二维字符数组,并实现了对这类数组的排序与释放操作。 适合人群:具有C语言基础的程序员或计算机科学相关专业的学生,尤其是那些希望深入理解字符串处理、指针操作以及动态内存管理机制的学习者。 使用场景及目标:①掌握如何高效地解析键值对字符串并去除其中的空白字符;②学会编写能够正确处理奇偶索引字符的函数;③理解const修饰符的作用范围及其对程序逻辑的影响;④熟悉动态分配二维字符数组的技术,并能对其进行有效的排序和清理。 阅读建议:由于本资源涉及较多底层概念和技术细节,建议读者先复习C语言基础知识,特别是指针和内存管理部分。在学习过程中,可以尝试动手编写类似的代码片段,以便更好地理解和掌握文中所介绍的各种技巧。同时,注意观察代码注释,它们对于理解复杂逻辑非常有帮助。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值