1.全部的索引字段,若是沒有設置not null,則須要加一個字節。
2.定長字段,int佔4個字節、date佔3個字節、char(n)佔n個字符。
3.變長字段,varchar(n),則有n個字符+兩個字節。
4.不一樣的字符集,一個字符佔用的字節數不一樣。latin1編碼的,一個字符佔用1個字節,gbk編碼的,一個字符佔用2個字節,utf8編碼的,一個字符佔用3個字節。 utf8mb4是一個字符佔4個字節
5.使用explain語句查詢到的key_len字段,能夠適用於上面的計算規則,能夠看到查詢是否使用到了聯合索引
6.mysql優化器會對條件中的 and的先後順序根據多列索引順序自動糾正過來mysql
經過索引的長度查看下面sql語句是否使用到了索引
CREATE TABLE `index_test` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`name` varchar(100) NOT NULL DEFAULT '',
`gid` int(11) NOT NULL DEFAULT '0',
`age` int(11) NOT NULL DEFAULT '0',
`score` int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (`id`),
KEY `name_gid_age_index` (`name`,`gid`,`age`),
KEY `score_index` (`score`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8
insert into index_test values(null,'taoshihan',2,1,0);
insert into index_test values(null,'taoshihan',2,2,0);
insert into index_test values(null,'taoshihan',2,3,0);sql
explain select * from index_test where name='taoshihan' group by gid;
+----+-------------+------------+------------+-------+--------------------+--------------------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+------------+------------+-------+--------------------+--------------------+---------+------+------+----------+-------------+
| 1 | SIMPLE | index_test | NULL | index | name_gid_age_index | name_gid_age_index | 310 | NULL | 6 | 66.67 | Using where |
+----+-------------+------------+------------+-------+--------------------+--------------------+---------+------+------+----------+-------------+mysql優化
key_len的長度是310,也就是100*3+2 + 4 +4 優化