内容简介:id为主键,id为奇数sex=1,id为偶数sex=0 sex=0,50000条数据;sex=1,50000条数据添加的索引类型可以看到相同的sql,加索引之后比不加索引慢许多。
id为主键,id为奇数sex=1,id为偶数sex=0 sex=0,50000条数据;sex=1,50000条数据
CREATE TABLE `people` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) DEFAULT NULL, `sex` tinyint(1) unsigned DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=100001 DEFAULT CHARSET=utf8; 复制代码
CREATE DEFINER=`root`@`localhost` PROCEDURE `proc_initData`()
BEGIN
DECLARE i INT DEFAULT 1;
WHILE i<=100000 DO
INSERT INTO people(name, sex) VALUES(CONCAT('姓名',i),0);
SET i = i+1;
END WHILE;
END
CALL proc_initData();
UPDATE people SET sex = 1 WHERE MOD(id,2) = 1;
复制代码
添加的索引类型
测试结果:
SELECT * FROM people WHERE sex = 0; SELECT * FROM people WHERE sex = 1; 复制代码
| 无sex索引 | 有sex索引 | |
|---|---|---|
| sex=0 |
|
|
| sex=1 |
|
|
可以看到相同的sql,加索引之后比不加索引慢许多。
原因
在InnoDB中每一个表都会有聚集索引,如果表定义了主键,则主键就是聚集索引。一个表只有一个聚集索引,其余为普通索引。 索引的结构是B+树,非叶子节点存储key,叶子节点存储value。
- 聚集索引,叶子节点存储行记录,InnoDB索引和记录是存储在一起的。
- 普通索引,叶子节点存储了主键的值。
以上表的索引结构示例如下(PS:索引结构仅供参考) 聚集索引
sex列普通索引
以上所述就是小编给大家介绍的《[InnoDB]性别字段为什么不适合加索引》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
编程原本
Alexander Stepanov、Paul McJones / 裘宗燕 / 机械工业出版社华章公司 / 2012-1-10 / 59.00元
本书提供了有关编程的一种与众不同的理解。其主旨是,实际的编程也应像其他科学和工程领域一样基于坚实的数学基础。本书展示了在实际编程语言(如C++)中实现的算法如何在最一般的数学背景中操作。例如,如何定义快速求幂算法,使之能使用任何可交换运算。使用抽象算法将能得到更高效、可靠、安全和经济的软件。 这不是一本很容易读的书,它也不是能提升你的编程技能的秘诀和技巧汇编。本书的价值是更根本性的,其终极目......一起来看看 《编程原本》 这本书的介绍吧!