《深入理解MySQL》中一段介绍MyISAM存储引擎中自动增长列的示例,如下

1 mysql>create table autoincre_demo2 -> (d1 smallint not nullauto_increment,3 -> d2 smallint not null,4 -> name varchar(10),5 ->index(d2,d1)6 -> )engine=myisam;7 Query OK, 0 rows affected (0.03sec)8

9 mysql> insert into autoincre_demo(d2,name) values(2,'2'),(3,'3'),(4,'4'),(2,'2'),(3,'3')10 (4,'4');11 Query OK, 6 rows affected (0.00sec)12 Records: 6 Duplicates: 0 Warnings: 0

13

14 mysql> select * fromautoincre_demo;15 +----+----+------+

16 | d1 | d2 | name |

17 +----+----+------+

18 | 1 | 2 | 2 |

19 | 1 | 3 | 3 |

20 | 1 | 4 | 4 |

21 | 2 | 2 | 2 |

22 | 2 | 3 | 3 |

23 | 2 | 4 | 4 |

24 +----+----+------+

25 6 rows in set (0.00 sec)

该示例中重点是新建的表存储引擎为MyISAM,组合索引为,自动增长列为d1,但是d1在组合索引中的位置未处于最左。

疑问1:d1列是自动增长列,在插入数据的时候未指定其值,按原来的认知d1会自动增长,为什么会出现重复的值?

疑问2:为什么出现的是1、1、1、2、2、2?有何规律?

后来 查资料得知:

1.InnoDB表的自动增长列可以手工插入,但是插入的值如果是空或者 0,则实际插入的将是自动增长后的值。InnoDB联合索引中使用自增必须在最左,并且会每次自增,不在最左的时候不支持。

2MyISAM中使用联合索引的时候自动增长列可以不在最左,最左有时候也描述为索引第一列。

(1)最左位置:每次依然遵循自增

(2)不在最左的时候其值未知:是否增加受其前缀唯一性影响,唯一不增加,不唯一增加

这时候就可以解答疑问1了,原来自动增长列不在组合索引最左的时候,其值不是遵循自增的,但是产生了新的问题。

疑问3:上面所说的受其前缀唯一性影响,那么其前缀唯一性指的是什么?唯一不增加,不唯一增加又如何理解?

新建一个表,增加d3列,将组合索引扩展到3个,插入数据.

结果就是:前缀唯一性指的是组合索引的第一列,请注意一点,每个最左第一列的不相等的值对应的自动增长列是独立计算的,也就是每次新出现一个值那么该值对应的自动增长列的值就从1开始计算,该值第二次出现的时候自动增长列就加1,依次类推增加.

通过上述结论可以解释疑问2所示的问题.

mysql普通索引自增_mysql中联合索引中的自增列的增长策略相关推荐

  1. mysql联合索引顺序调整_MySQL 关于联合索引的字段顺序规则讨论

    联合索引的顺序,难道不是哪个查询条件最多用就放在前面的吗? 比如商品有三个分类A,B,C,类似「界门纲目科属种」那样,越左类别越大.还有一个是商品来源D,不一定会用于查询条件中. 举个例子,A代表衣服 ...

  2. mysql索引命名规范_mysql使用规范-索引规范

    (1)单张表中索引数量不超过5个. (2)单个索引中的字段数不超过5个. (3)索引名必须全部使用小写. (4)非唯一索引按照"idx_字段名称[_字段名称]"进用行命名.例如id ...

  3. mysql中联合索引abc 使用bac_mysql 联合索引

    mysql 联合索引详解 联合索引又叫复合索引.对于复合索引:Mysql从左到右的使用索引中的字段,一个查询可以只使用索引中的一部份,但只能是最左侧部分.例如索引是key index (a,b,c). ...

  4. mysql复合索引优点_mysql 联合索引有什么好处? 联合索引的意义

    mysql 里创建'联合索引'的意义 问题? 因为什么需求,要创建'联合索引'?最实际好处在于什么?如果是为了更快查询到数据,有单列索引不是Ok?为什么有'联合索引'的存在? 简单的说有两个主要原因: ...

  5. mysql建立联合索引_mysql之联合索引

    mysql之联合索引测试: 前期准备: 建立联合索引? CREATE TABLE `test` ( `id` bigint(16) NOT NULL AUTO_INCREMENT, `aaa` var ...

  6. MySQL中联合索引问题,

    经常被问到,如果创建一个联合索引(a,b,c),那么那些查询会用到索引. 首先,创建这个联合索引相当于创建了a,(a,b),(a,b,c)三个索引,且=可以乱序. 问的比较多的是(a,c),(b,c) ...

  7. mysql 什么时候用单列索引?什么使用用联合索引?

    作者:范孝鹏 链接:https://www.zhihu.com/question/40736083/answer/88191544 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载 ...

  8. mysql辅助索引非叶子节点_Mysql的聚集索引与辅助索引

    Mysql数据库中的B+树索引可以分为聚集索引和辅助索引(非聚集索引).本文将介绍一下两者. 聚集索引 聚集索引:指索引项的排序方式和表中数据记录排序方式一致的索引(这里不懂先放着,一会举例),每张表 ...

  9. MySQL索引效率对比_mysql下普通索引和唯一索引的效率对比

    抓的这几个都是第一次执行的,刷了几次后,取平均值,效率大致相同,而且如果在一个列上同时建唯一索引和普通索引的话,mysql会自动选择唯一索引. 谷歌一下: 唯一索引和普通索引使用的结构都是B-tree ...

最新文章

  1. python人工智能计算器_招募:基于python的召唤师全时段全技能(含均值AI)计算器全程测试...
  2. SOA、SOAP、RPC、REST、DUBBO的区别与联系
  3. python的编程模式-Python设计模式:为了整洁又时尚的代码
  4. asp.net(c#) linkbutton CommandArgument
  5. USB hub(221)
  6. numpy.random详解
  7. Runtime底层原理--动态方法解析、消息转发源码分析
  8. 软件测试作业2:在敏捷宣言遵循的12条原则中挑选1条你感兴趣的原则进行风险评估
  9. MySQL 中的重做日志,回滚日志以及二进制日志的简单总结
  10. python抢货程序_Python自动化xpath实现自动抢票抢货代码示例
  11. day7——集合,深浅copy
  12. 99+好友共同关注,公众号推荐
  13. 高通宣称其语音识别系统准确率高达95%
  14. 【回文串5 重点+动态规划】LeetCode 132. Palindrome Partitioning II
  15. SID与域信任不一致导致AD无法登陆/server2003系统封装
  16. 20. 为包含指针的关联容器指定比较类型
  17. 广联达软件未检测到加密锁请重新插入加密锁或网络服务器
  18. matlab 连续傅里叶变换,matlab快速傅里叶变换.ppt
  19. 实现uniapp 内部下载apk文件和安装
  20. 19张网络工程师必看的思维导图

热门文章

  1. 做人:失信是最大的破产!
  2. linux子系统 重置,浅析win10系统重置Linux子系统的设置方法
  3. 链表定义、链表的插入、链表的删除、链表的查找
  4. react 给一个引用的组件添加新属性_高阶组件在React中的应用
  5. swift自行车品牌介绍_品牌101:简介
  6. 平面设计师和ui设计师_平面设计师为什么要享受所有乐趣?
  7. (原創) 如何在Ubuntu設定P7010的1280 x 768解析度? (OS) (Linux) (Ubuntu) (NB) (P7010)
  8. 聊聊storm的PartialKeyGrouping
  9. 用uid分库,uname上的查询怎么办?
  10. 用maven profile实现环境配置切换