1.表结构,time1添加普通索引:
CREATE TABLE `time_table` (
`time1` INT(11) NULL DEFAULT NULL,
`time2` INT(11) NULL DEFAULT NULL,
INDEX `time1` (`time1`)
)
ENGINE=MyISAM
;
2.蠕虫复制创建200万条数据
insert into time_table select * from time_table
3.开始查询:time1有索引,time2没索引,数据200万
set profiling=1;
select * from time_table where time2=1111111;
select * from time_table where time1=1111111;
show profiles;
4.结果,加了索引反而变慢了:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicmbw5COyMWM0IjM4YjMxYWYjVjMiR2YwADM4MDMjJWZ1I2My8CX0JXZ252bj91Ztl2Lc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
重新反思,蠕虫复制的表的内容过于简单了,总共400百万条数据,200万条数据time1=11111,time2=11111,还有200万条数据,time1=22222,time2=22222,
重新制造200万条数据,先蠕虫复制400百万条数据,time2=1,然后新加字段time1(自增),在update time2=time1,
最终的表如下(time1是唯一索引):
查询时间分析,符合预期:
然后改成唯一索引,也符合预期:
但是依旧有问题:
为什么800万条数据,数据几乎一样(一半为111111,一半为2222)
添加索引的字段,反而查询更慢。
自己的猜想:数据一样,索引是不是作用效果几乎没有,但是因为有了索引,字段存储空间多了,查询慢了,纯属自己乱想,希望可以解答一二!
希望可以交流下,qq:2210170490