发表于: 2022-07-29 18:06:05

2 619


今天完成的事:

1.关于索引的学习、创建和使用:

  首先根据网络资料大致学习了解了什么是索引、为什么要用索引、索引的种类以及索引的优缺点。

  索引类似一种目录,使用索引可以提高数据库的检索速度,索引大致分为普通索引和唯一索引,但是滥用索引会拖慢更新表的速度并占用磁盘空间。

  更详细的知识和原理相关我作为笔记文档记录,暂且不放在日报内。

  后续部分搜索获得网络资料内容涉及到数据结构方面的知识比如哈希表和BTREE,判断目前不需要深入了解索引的原理所以暂时按下不表。

  值得注意的是,主键本质也是一种索引。

SQL语句[创建索引]有如下两种:

    CREATE INDEX index_name ON table_name(column_name);

    ALTER TABLE table_name ADD INDEX index_name(column);

 

以及两种SQL语句[删除索引]

    DROP INDEX index_name ON table_name;

    ALTER TABLE table_name DROP INDEX index_name;

 

SQL语句[查看索引]

    show index from table_name;

    show keys from table_name;

 

  至此我判断创建索引相关的知识已经完备,在自建实验用表实践以上语句的使用验证自己的理解后,尝试向业务表student_info的姓名字段Name建立索引。

  建立索引后用 show keys from table_name; 查看表内已有的索引,可以看见除了之前设置的主键PRIMARY外还有一个自己添加的索引name_index

  完成给姓名建立索引。


2.判断哪些哪些字段数据需要建立索引:

  根据网络资料的讯息,结合目前业务表的实际情况,总结出表中需要建立索引的字段最好有如下特征。

  (1)字段的值唯一,不重复。

  (2)作为查询的限定条件被频繁使用。

  (3)作为排序、分组的依据被频繁使用。

  也就是说具有大量重复值也无明显特征的字段不需要建立索引。

  综上,我认为业务表中除了主键ID(学号)和刚刚建立索引的Name(姓名)外,QQ(QQ)Student_ID(线上学号)也适合建立索引。QQ唯一性高且可以频繁作为查询的限定条件,线上学号不仅有QQ字段的优点还可以作为排序及分组的依据频繁使用,可谓完美满足建立索引的条件。至于Daily_Link(日报链接),虽然有唯一性但不适合查询也不适合排序以及分组,我判断段此字段不应该建立索引。其他的字段在人群基数过大时都有较高的重复率,不宜建立索引。

 

3.插入10条数据对比有无索引时SQL语句的执行效率:

  首先把建立了索引的业务表作为SQL文件导出,保存在不同于之前无索引SQL文件的地方。

  接着运行无索引的SQL文件,表回到无索引状态。

SQL语句[批量插入数据]
    INSERT INTO table_name

    (column_name1, column_nmae2, column_name3…column_nameN)

    VALUES

    (valueA1, valueA2, valueA3…valueAN),

    (valueB1, valueB2, valueB3…valueBN),

    …

    (valueN1, valueN2, valueN3…valueNN);

  结尾是逗号而不是分号的话就不会执行语句。

  通过SELECT确认运行无索引SQL文件后表内无索引,批量插入数据。

  插入完数据后表内结构如下。


  将已经添加了10行数据的表作为SQL文件保存。

  接着运行有索引表的SQL文件,再次批量插入10条数据。

  两次的插入时间根据系统显示都是0.01s,似乎在这个单位下索引对于插入操作的影响微不可见。

 

  随后反复的运行SQL文件以对比两张表在更新UPDATE、删除DELETE、查询SELECT方面的区别。所有语句均已WHERE Name =  ‘黄炜杰作为限定条件。

  比较结果如下:

  有索引表的查询、更新、删除10条数据时间分别为0.05s0.01~0s0.01s

  无索引表的查询、更新、删除10条数据时间分别为0.06~0.07s0.01~0s0.01s

  可能是数据量较小的原因,没有看出在姓名字段建立索引的影响。

 

4.下载JAVA,安装并配置环境变量:

  根据网络资料下载本地个人编程使用的JAVA SE,下载JDK18.0.2版本,根据网络资料完成了环境变量JAVA_HOMEPath的配置。在cmd命令行中输入命令javajavac验证安装成功。

 

5.下载并安装IDEA

  根据网络资料完成IDEA的下载安装以及注册,因为下载的版本2022.2较新导致网络上几乎没有符合的网络教程,需要学习和熟悉IDEA的操作。

 

明天计划的事:

1.深度思考MySQL相关的问题。

2.学习并总结JDKJRE的区别。

3.下载Maven3,安装并配置环境变量。

4.创建一个Maven项目。

5.学习JAVA相关的语法以及结构知识。

 

遇到的问题:

1.对于DROPDELETE的区别以及ALTERUPDATE的区别产生了疑惑,自主在网络搜索相关资料,得以解决。

 

收获:

1.学习了索引相关的知识并在数据库中应用索引。大致了解了索引的种类、优点、缺点以及适合建立索引的场景。

2.学习了解了SQL语言中DML(数据操作语言)DDL(数据定义语言)的区别。了解到UPDATEDELETESELECTINSERT都是对表内的数据做操作,属于DML。而ALTERDROPCREATE都是涉及到表结构操作的DDL



返回列表 返回列表
评论

    分享到