【mysql】sql优化之学习索引(一)
前言
目标,学习索引。
接下来,先把一些基础数据做好。
首先建表(注意,id非主键)
DROP TABLE IF EXISTS `test_indexes`;
CREATE TABLE `test_indexes` (
`id` int NOT NULL,
`c1` varchar(255) DEFAULT NULL,
`c2` varchar(255) DEFAULT NULL,
`c3` varchar(255) DEFAULT NULL,
`c4` varchar(255) DEFAULT NULL,
`c5` varchar(255) DEFAULT NULL,
`c6` varchar(255) DEFAULT NULL,
`c7` varchar(255) DEFAULT NULL,
`c8` varchar(255) DEFAULT NULL,
`c9` varchar(255) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
然后,插入数据
插入数据我们通过存储过程去插入。(后面会专门整理一下存储过程的简单应用)
选中函数-右键新增-选择过程,添加保存即可BEGIN
declare i int default 1;
start transaction; #开启事务
while i <= 1000000 do
insert into test_indexes
values(i, concat("张天爱-", i), '测试字段', '测试字段', '测试字段', '测试字段', '测试字段', '测试字段', '测试字段', '测试字段');
set i = i+1;
end while;
commit;
END
开始测试
测试查询数据
直接select * 查询,发现根本查不出来,需要半天才能显示一部分;select * from test_indexes
然后分页查询,可以正常查出来
select * from test_indexes order by id desc limit 0,10
- 测试给id加上唯一索引
因为数据过多,只是给表加上索引都用了十几秒。
加上后,我们再试试分页查询
可以看到,相同的语句,没有加索引时,用了1.356
秒
加上唯一索引后,使用了0.031
秒,连0.1秒都没用到。
测试条件查询
c1字段没有添加索引,查询时间用了0.706
秒
下面测试给c1字段添加普通索引
再次测试
可以看到,仅用了0.034
秒!这是一个巨大的提升。
总结
不了解之前,觉得很难,很复杂,当尝试过后,就会发现,很好用。
但是当插入和更新的时候,会修改到索引,所以索引也不能添加过多,否则也会降低编辑时的速度。
后面会再补充各种类型的索引。
还没有评论,来说两句吧...