7.1,普通索引
ALTER TABLE table_name
ADD INDEX index_name ( column
)
7.2,主键索引
ALTER TABLE table_name
ADD PRIMARY KEY ( column
)
7.3,唯一索引
ALTER TABLE table_name
ADD UNIQUE ( column
)
7.4,全文索引
ALTER TABLE table_name
ADD FULLTEXT ( column
)
7.5,多列索引
ALTER TABLE table_name
ADD INDEX index_name ( column1
, column2
, column3
)
在这里 key_len 大小的计算规则是:
- 一般地,key_len 等于索引列类型字节长度,例如int类型为4-bytes,bigint为8-bytes;
- 如果是字符串类型,还需要同时考虑字符集因素,例如:CHAR(30) UTF8则key_len至少是90-bytes;
- 若该列类型定义时允许NULL,其key_len还需要再加 1-bytes;
- 若该列类型为变长类型,例如 VARCHAR(TEXT\BLOB不允许整列创建索引,如果创建部分索引,也被视为动态列类型),其key_len还需要再加 2-bytes;
key_len的长度计算公式:
varchr(10)变长字段且允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段)
varchr(10)变长字段且不允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)+2(变长字段)
char(10)固定字段且允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL)
char(10)固定字段且允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)
综上,看下面几个例子:
列类型 key_len 备注
id int key_len = 4+1 = 5 允许NULL,加1-byte
id int not null key_len = 4 不允许NULL
user char(30) utf8 key_len = 303+1 允许NULL
user varchar(30) not null utf8 key_len = 303+2 动态列类型,加2-bytes
user varchar(30) utf8 key_len = 303+2+1 动态列类型,加2-bytes;允许NULL,再加1-byte
detail text(10) utf8 key_len = 303+2+1 TEXT列截取部分,被视为动态列类型,加2-bytes;且允许NULL