标签:前缀 原则 int DEFAULT 查询 回表 索引 MYSQL NULL
建立联合索引后,数据库会生成一颗B+树,值是主键。
回表:从联合索引表中查询到数据后,在回到主键表查询,避免数据冗余。
CREATE TABLE `t1` (
`id` int NOT NULL,
`a` int DEFAULT NULL,
`b` int DEFAULT NULL,
`c` int DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `index_bc` (`b`,`c`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
先任意插入12条数据
第一种情况
上图中查询表所有字段时,条件c遵循最左前缀原则。在b+中查询类似 *c,所以不使用索引查询,使用全表扫描。
上图中,查询指定字段,并且遵循了最左原则,系统会自动优化。
范围查询时,当查询的行数一旦过多,回表数量一旦增多,则不会使用索引。(系统内部自行判断回表成本和全文扫描查询成本)
索引列不应该作为表达式的一部分,一旦对列改变后,就不能使用索引查询,对磁盘中的数据进行,会增大开销。
标签:前缀,原则,int,DEFAULT,查询,回表,索引,MYSQL,NULL 来源: https://www.cnblogs.com/yewook/p/14486694.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。