zoukankan      html  css  js  c++  java
  • [MySQL] mysql索引的长度计算和联合索引

    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的前后顺序根据多列索引顺序自动纠正过来

    通过索引的长度查看下面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);

    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 |
    +----+-------------+------------+------------+-------+--------------------+--------------------+---------+------+------+----------+-------------+

    key_len的长度是310,也就是100*3+2 + 4 +4

  • 相关阅读:
    Unity制作地形的常用插件之GAIA
    JetBrains套装免费学生授权申请(IntelliJ, ReSharper, WebStorm...)
    Unity2D游戏开发之保卫萝卜
    Unity制作出《超级马里奥》的2D和3D混合效果
    Unity2019.1中文技术手册离线版
    暗黑战神! Unity3D网游ARPG实战案例
    Unity移动端入门
    win10如何查看电脑端口使用情况
    自制FastDFS文件服务器虚拟机分享
    MySQL:使用SQL语句删除所有索引
  • 原文地址:https://www.cnblogs.com/taoshihan/p/12298037.html
Copyright © 2011-2022 走看看