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

  • 相关阅读:
    php输出UTF8格式XML文件中文乱码问题(含asp,asp.net,jsp代码)
    如何取得C# 的函数调用关系
    ZYSocketSuper 2.0 SP1 包含案例 聊天室 示例下载。
    VS2008制作安装程序
    Linq动态条件处理方法
    c#生成Excel,可建立sheet,设定sheet名称,调整列宽度
    vs2005和 vs2008 预编译的做法
    预览文章: Flex与.NET基于Socket的网络连接
    直接执行查询和命令(LINQ TO SQL)
    Fms教程7 理解共享对象
  • 原文地址:https://www.cnblogs.com/taoshihan/p/12298037.html
Copyright © 2011-2022 走看看