Mysql SQL执行计划分析
前期准备
MySQL5.7
存储引擎InnoDB
建表语句
创建表t1表:
PRIMARY KEY (
id)
:定义id
列为表的主键,这意味着每一行的id
值必须是唯一的,且不可为NULL。KEY
idx_abc1(
a,
b,
c)
:定义了一个名为idx_abc1
的索引,这是一个复合索引,基于a
,b
, 和c
列。这将提高对这些列进行组合查询时的性能。ENGINE=InnoDB
:指定了存储引擎为InnoDB,这是MySQL的一种事务安全的存储引擎,支持行级锁定和外键约束。DEFAULT CHARSET=utf8
:设置了表的默认字符集为UTF-8,用于编码表中的文本数据。
CREATE TABLE `t1` (
`id` varchar(32) NOT NULL,
`a` varchar(64) NOT NULL,
`b` varchar(64) NOT NULL,
`c` varchar(64) NOT NULL,
`d` varchar(64) NOT NULL,
`e` varchar(64) NOT NULL,
`f` varchar(64) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_abc1` (`a`,`b`,`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
创建表t2表:
UNIQUE KEY
f
(f
):在表t2
中,为列f
定义了一个唯一索引UNIQUE KEY
。这意味着列f
中的每个值都必须是唯一的,不允许有重复的值,即使它允许为NULL
(因为NULL
值在唯一索引中被视为唯一的)。而在表t1
中,列f
没有这样的约束
CREATE TABLE `t2` (
`id` varchar(32) NOT NULL,
`a` varchar(64) NOT NULL,
`b` varchar(64) NOT NULL,
`c` varchar(64) NOT NULL,
`d` varchar(64) NOT NULL,
`e` varchar(64) NOT NULL