专栏名称: 互联网后端架构
主要介绍Java后端架构。其中也会掺杂一些前端、GO、Python、Linux,目标:全栈工程师!---好像很牛叉的样子 ^-^
目录
相关文章推荐
InfoQ Pro  ·  充电计划 | 云成本优化 ·  7 小时前  
高可用架构  ·  AIGC浪潮下的技术盛宴|第12届GIAC开 ... ·  8 小时前  
高可用架构  ·  微信读书后台架构演进之路 ·  昨天  
架构师之路  ·  全球软件工程技术大会,送福利! ·  2 天前  
51好读  ›  专栏  ›  互联网后端架构

一篇解决面试常问的MySQL性能优化

互联网后端架构  · 公众号  · 架构  · 2020-06-24 08:34

正文

请到「今天看啥」查看全文


三种索引的索引方式是一样的,只不过对索引的关键字有不同的限制:

  • 普通索引:对关键字没有限制

  • 唯一索引:要求记录提供的关键字不能重复

  • 主键索引:要求关键字唯一且不为null

索引管理语法

查看索引

show create table 表名

desc 表名

创建索引

创建表之后建立索引

create TABLE user_index(    id int auto_increment primary key,    first_name varchar(16),    last_name VARCHAR(16),    id_card VARCHAR(18),    information text);
-- 更改表结构alter table user_index-- 创建一个first_name和last_name的复合索引,并命名为nameadd key name (first_name,last_name),-- 创建一个id_card的唯一索引,默认以字段名作为索引名add UNIQUE KEY (id_card),-- 鸡肋,全文索引不支持中文add FULLTEXT KEY (information);


show create table user_index

创建表时指定索引

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));


删除索引

根据索引名删除普通索引、唯一索引、全文索引: 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-- 重新定义字段MODIFY id int,drop PRIMARY KEY

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

执行计划explain

CREATE TABLE innodb1 (    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));insert into innodb1 (first_name,last_name,id_card,information) values ('张','三','1001','华山派');

我们可以通过 explain selelct 来分析SQL语句执行前的执行计划:







请到「今天看啥」查看全文