【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
    
    在这里插入图片描述
  1. 测试给id加上唯一索引
    因为数据过多,只是给表加上索引都用了十几秒。
    加上后,我们再试试分页查询
    在这里插入图片描述
    可以看到,相同的语句,没有加索引时,用了1.356
    加上唯一索引后,使用了0.031秒,连0.1秒都没用到。

测试条件查询

c1字段没有添加索引,查询时间用了0.706
在这里插入图片描述
下面测试给c1字段添加普通索引
在这里插入图片描述
再次测试
在这里插入图片描述
可以看到,仅用了0.034秒!这是一个巨大的提升。

总结

不了解之前,觉得很难,很复杂,当尝试过后,就会发现,很好用。
但是当插入和更新的时候,会修改到索引,所以索引也不能添加过多,否则也会降低编辑时的速度。
后面会再补充各种类型的索引。

猜你喜欢

转载自blog.csdn.net/s1441101265/article/details/114980854