mysql布尔值可以加索引吗?
给bool型加索引的目的是什么?区分度是2,就算加了,估计也是要走全表扫描的。也就是说加了索引带来写性能的下降和存储空间的增大,但对读性能提升没什么帮助。还不如不加。
可以加,但针对只有两种(true / false)或寥寥几种取值的栏位加索引意义不大,反而还会增加 DBMS 的负担。除非其中个别值非常罕见,同时你需要主要访问这些非常罕见的值。
比如要对一个 bool 栏位索引,首先你要保证其中 99.9% 的值都是 false,而你恰恰仅需要依靠索引找到其中值为 true 的那些行。
不可以。
索引的目的:空间换时间,加快查询效率。需要用索引的存储空间来换取查询效率的极大提升。
什么情况下加索引可以提高查询效率?答案是:具有区分度的栏位,也即索引选择性高。
学生表(student)的table 如下:
Name sex
小明 男
小红 女
....sex上的索引选择性为:
select count(distinct sex)/count(*) from student;
name的索引选择性为:
select count(distinct name)/count(*) from student;
很显然,name 的索引选择性比sex的索引选择性高很多。mysql查询的时候再索引树上可以通过name快速找到一条数据,反之,在sex的索引树上则不能,因为男生和女生很多,需要一个一个check。
故:在sex上加索引并不能提高查询效率,反而会增加空间开销。
如果是单列的没有必要,典型的反例
如果是联合索引的话可以测试一下效果,如果提升不错的话可以加
mysql没有布尔,如果这列的值只有几种可能,也不介意加索引可以加,但是没有意义。区分度太小,加了索引,优化器可能都不会使用索引,而是改用range scan。
首先,没有必要在这种选择性不高的列加索引,其次,即使你加上,现有版本的mysql优化器也可能因为数值百分比的问题而用不到索引。
没意义
推荐阅读: