【mysql】sql优化之学习索引(一)

朱雀 2022-11-10 10:50 262阅读 0赞

前言

目标,学习索引。
接下来,先把一些基础数据做好。

  • 首先建表(注意,id非主键)

    1. DROP TABLE IF EXISTS `test_indexes`;
    2. CREATE TABLE `test_indexes` (
    3. `id` int NOT NULL,
    4. `c1` varchar(255) DEFAULT NULL,
    5. `c2` varchar(255) DEFAULT NULL,
    6. `c3` varchar(255) DEFAULT NULL,
    7. `c4` varchar(255) DEFAULT NULL,
    8. `c5` varchar(255) DEFAULT NULL,
    9. `c6` varchar(255) DEFAULT NULL,
    10. `c7` varchar(255) DEFAULT NULL,
    11. `c8` varchar(255) DEFAULT NULL,
    12. `c9` varchar(255) DEFAULT NULL
    13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
  • 然后,插入数据
    插入数据我们通过存储过程去插入。(后面会专门整理一下存储过程的简单应用)
    选中函数-右键新增-选择过程,添加保存即可
    在这里插入图片描述

    1. BEGIN
    2. declare i int default 1;
    3. start transaction; #开启事务
    4. while i <= 1000000 do
    5. insert into test_indexes
    6. values(i, concat("张天爱-", i), '测试字段', '测试字段', '测试字段', '测试字段', '测试字段', '测试字段', '测试字段', '测试字段');
    7. set i = i+1;
    8. end while;
    9. commit;
    10. END

    在这里插入图片描述

开始测试

  • 测试查询数据
    直接select * 查询,发现根本查不出来,需要半天才能显示一部分;

    1. select * from test_indexes

    然后分页查询,可以正常查出来

    1. 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秒!这是一个巨大的提升。

总结

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

发表评论

表情:
评论列表 (有 0 条评论,262人围观)

还没有评论,来说两句吧...

相关阅读

    相关 索引优化()

    对于任何一个后端的开发人员来说,索引优化是必备的技能,接下来会通过两篇文章来介绍如何优化索引以及如何设计好的索引。 一、数据准备 创建一个员工表,除了主键索引外,还额外

    相关 mysqlsql执行顺序

    mysql语句的执行顺序问题 这是先执行ORDERBY语句,大多数的你想找前N条记录的时候LIMIT都会最后执行,因为如果不是这样的话就不会达到你想要的记录 本回答由提

    相关 MySQL索引优化

    1. 联合索引和模糊查询的常见问题 1.1 联合索引第一个字段用范围导致不会走索引的情况 联合索引第一个字段就用范围查找不会走索引,mysql内部可能觉得第一个字段