MySQL面经【索引】

索引是什么

索引相当于一本书的目录,通过目录可以快速地找到对应的资源。 添加索引是给某一个字段,或者某些字段添加索引。

索引的种类

  • 主键索引(PRIMARY) 数据列不允许重复,不允许为NULL,⼀个表只能有⼀个主键。
  • 唯⼀索引(UNIQUE) 数据列不允许重复,允许为NULL值,⼀个表允许多个列创建唯⼀索引。

可以通过 ALTER TABLE table_name ADD UNIQUE (column);

创建唯⼀索引 可以通过 ALTER TABLE table_name ADD UNIQUE (column1,column2);

  • 普通索引(INDEX)

可以通过 ALTER TABLE table_name ADD INDEX index_name (column); 创建普通索引

可以通过 ALTER TABLE table_name ADD INDEX index_name(column1,column2,column3); 创建组合索引

全⽂索引(FULLTEXT)

  • 可以通过 ALTER TABLE table_name ADD FULLTEXT (column); 创建全⽂索引

索引的特点

  1. 索引加快数据库的检索速度
  2. 索引降低了插⼊、删除、修改等维护任务的速度
  3. 唯⼀索引可以确保每⼀⾏数据的唯⼀性
  4. 通过使⽤索引,可以在查询的过程中使⽤优化隐藏器,提⾼系统的性能 索引需要占物理和数据空间

索引并⾮是越多越好,创建索引也需要耗费资源,

⼀是额外占用了数据库的存储空间

⼆是在插⼊和删除时要花费较多的时间维护索引

创建索引的三种方式

  1. 创建表时创建索引

在执⾏CREATE TABLE时创建索引

CREATE TABLE user_index2 (
id INT auto_increment PRIMARY KEY,
first_name VARCHAR (16),
last_name VARCHAR (16),
id_card VARCHAR (18),
information text,
KEY name (first_name, last_name),
FULLTEXT KEY (information),
UNIQUE KEY (id_card)
);
  1. 使⽤ALTER TABLE命令去增加索引
 ALTER TABLE table_name ADD INDEX index_name (column_list);

ALTER TABLE⽤来创建普通索引、UNIQUE索引或PRIMARY KEY索引。

其中table_name是要增加索引的表名,column_list指出对哪些列进⾏索引,多列时各列之间⽤逗号分隔。 索引名index_name可⾃⼰命名,缺省时,MySQL将根据第⼀个索引列赋⼀个名称。另外,ALTER TABLE允许在单个语句中更改多 个表,因此可以在同时创建多个索引。

ALTER TABLE table_name ADD INDEX index_name (column_list);
  1. 使⽤CREATE INDEX命令创建
   CREATE INDEX index_name ON table_name (column_list);

CREATE INDEX可对表增加普通索引或UNIQUE索引。(但是,不能创建PRIMARY KEY索引)

删除索引

根据索引名删除普通索引、唯⼀索引、全⽂索引:

alter table 表名 drop KEY 索引名

alter table user_index drop KEY name;
alter table user_index drop KEY id_card;
alter table user_index drop KEY information;

删除主键索引: alter table 表名 drop primary key (因为主键只有⼀个)。

   alter table user_index drop primary key

这⾥值得注意的是, 如果主键⾃增长,那么不能直接执⾏此操作(⾃增长依赖于主键索引):

alter table user_index
-- 重新定义字段
MODIFY id int,
drop PRIMARY KEY

但通常不会删除主键,因为设计主键⼀定与业务逻辑⽆关。

### MySQL 试经验和常见问题 #### 数据库基础知识 在Linux系统运维企业试中,除了技术能力和解决问题的能力外,数据库的基础知识也是重要的考核部分[^1]。对于MySQL而言,了解SQL语言和关系型数据库的基本概念是必不可少的。这包括表结构设计、索引创建与优化、事务处理机制等内容。 #### SQL语句编写能力 掌握标准SQL语法并能熟练运用各种子查询、连接操作(JOIN)、聚合函数等高级特性来完成复杂数据检索任务是非常关键的一项技能。例如,在多张表格之间建立联系以提取所需信息: ```sql Select t1.*, t2.price from table1 t1 join (select id, price from table2 order by price DESC limit 10) as t2 on t1.id = t2.id; ``` 这段代码展示了如何先筛选出`table2`中的高价商品列表再将其与另一张表关联起来获取更多细节[^4]。 #### JDBC基础 作为Java应用程序中最常用的持久化层框架之一,JDBC提供了访问不同类型的关系型数据库API接口。熟悉其工作原理有助于更好地理解底层实现逻辑,并能够写出高效稳定的程序代码[^3]。 #### 多结果集合并 当需要将来自不同SELECT命令的结果组合成单一输出时可以采用UNION运算符。需要注意的是两个或多个待联合的选择项必须具有相同数量列数且对应位置上的字段类型相匹配。 #### 性能调优策略 性能问题是很多企业在实际生产环境中遇到的最大挑战之一。因此候选人应该具备一定的分析工具使用经验以及针对特定场景下的解决方案建议,比如通过调整配置参数或者重构低效查询等方式提高整体运行效率。 #### 安全性和备份恢复方案 安全始终是一个重要话题,尤其是在涉及到敏感商业信息保护方更是如此;而定期做好增量/完全备份计划则可以在意外发生后迅速恢复正常业务运作状态。
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值