mysql索引是什么 优点和缺点_MySQL索引优缺点、使用原则及种类介绍「建议收藏」

mysql索引是什么 优点和缺点_MySQL索引优缺点、使用原则及种类介绍「建议收藏」一、索引简介1、索引简介索引(Index)是帮助MySQL高效获取数据的数据结构。在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。MyISAM和InnoDB存储引擎只支持BTREE索引,MEMORY/HEAP存储引擎支持HASH和BTREE索引。2、索引的优点A、提高数据检索效率,降低数据库的IO成本。B、通过索引对数据进行排序,降低数据排序的成本降低了CPU的消…

大家好,又见面了,我是你们的朋友全栈君。

一、索引简介

1、索引简介

索引(Index)是帮助MySQL高效获取数据的数据结构。

在MySQL中,索引属于存储引擎级别的概念,不同存储引擎对索引的实现方式是不同的。MyISAM和InnoDB存储引擎只支持BTREE索引,MEMORY/HEAP存储引擎支持HASH和BTREE索引。

2、索引的优点

A、提高数据检索效率,降低数据库的IO成本。

B、通过索引对数据进行排序,降低数据排序的成本降低了CPU的消耗。

C、大大加快数据的查询数据。

3、索引的缺点

A、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加

B、索引也需要占空间,我们知道数据表中的数据也会有最大上线设置的,如果我们有大量的索引,索引文件可能会比数据文件更快达到上线值

C、当对表中的数据进行增加、删除、修改时,索引也需要动态的维护,降低了数据的维护速度。

4、索引的使用原则

A、主键自动建立唯一索引

B、频繁作为查询条件的字段应该创建索引

C、查询中与其他表关联的字段,外键关系建立索引

D、频繁更新的字段不适合建立索引,因为每次更新不单单是更新了记录还会更新索引

E、WHERE条件里用不到的字段不创建索引

F、单键/组合索引的选择问题,who?(在高并发下倾向创建组合索引)

G、查询中排序的字段,排序的字段若通过索引去访问将大大提高排序速度

H、查询中统计或者分组字段

不适合使用索引的场合:

A、对经常更新的表就避免对其进行过多的索引,对经常用于查询的字段应该创建索引。

B、数据量小的表最好不要使用索引,由于数据较少,可能查询全部数据花费的时间比遍历索引的时间还要短,索引就可能不会产生优化效果。

C、在不同值少的列上不要建立索引,比如在学生表的”性别”字段上只有男,女两个不同值。在一个不同值较多的列可以建立索引。

二、索引的分类

1、单列索引

单列索引只包含单个列,但一个表中可以有多个单列索引。

A、普通索引

普通索引允许在定义索引的列中插入重复值和空值。

B、唯一索引

索引列中的值必须是唯一的,但是允许为空值。

C、主键索引

主键索引是一种特殊的唯一索引,不允许有空值。

2、复合索引

在表中的多个字段组合上创建的索引,只有在查询条件中使用了组合的多个字段的左边字段时,索引才会被使用,使用复合索引时遵循最左前缀集合。

3、全文索引

全文索引,只有MyISAM存储引擎支持,只能在CHAR、VARCHAR、TEXT类型字段上使用全文索引。

全文索引主要用来查找文本中的关键字,而不是直接与索引中的值相比较。在数据量较大时候,先将数据放入一个没有全文索引的表中,然后再用CREATE index创建fulltext索引,要比先为一张表建立fulltext然后再将数据写入的速度快很多。

4、空间索引

空间索引是对空间数据类型的字段建立的索引,MySQL中的空间数据类型有四种:GEOMETRY、POINT、LINESTRING、POLYGON。

在创建空间索引时,使用SPATIAL关键字。

空间索引必须使用MyISAM存储引擎,并且空间索引的字段必须为非空。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/141298.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 通俗易懂讲解均方误差 (MSE)「建议收藏」

    通俗易懂讲解均方误差 (MSE)「建议收藏」测量预测值与某些真实值匹配程度。MSE通常用作回归问题的损失函数。例如,根据其属性估算公寓的价格。这是维基百科中定义的均方误差(MSE)公式。它代表了一个非常简单的概念,但如果您刚开始使用ML,可能不太容易读懂。让我们从内而外拆开包装。MSE计算模型的预测Ŷ与真实标签Y的接近程度。您希望误差变为0。如果您预测房价,误差可能是预测价格与实际价格之间的差异。从标签中减去预测是行不通的。误差可能为负也可能为正,这是对样本求和时的问题。您可以取绝对值或误差的平方。取平方有一个特性,它惩罚更大的

    2022年9月30日
    0
  • java位运算

    java位运算

    2021年9月29日
    41
  • bat批量删除空文件夹_如何建立bat文件夹

    bat批量删除空文件夹_如何建立bat文件夹@echooff&title清理空目录set/pPan=请输入要清理文件夹,回车确认:cls&echo即将开始清理。。。&ping0-n"3">nulcd/d%Pan%for/f"delims="%%ain(‘dir/ad/s/b’)do(dir/a-d/s/b"%%~a\*">nul2>nul..

    2022年9月16日
    0
  • webpack devtools_webpack loader和plugin的区别

    webpack devtools_webpack loader和plugin的区别首先我们需要知道sourcemap是什么?顾名思义资源映射,它做的就是维护打包处理后的代码与源代码之间的映射关系,只有映射的精确性则取决于webpack的配置项devtool,其决定了项目打包时是否以及如何生成sourcemap,而生成的sourcemap不同决定了构建产物的体积和构建以及重新构建的速度的不同。具体配置项可选值可参考webpack文档这里不一一列举。首先可以看一下webpack的源码,对应处理逻辑仅有20行:https://github.com/webpack/webpack/bl

    2022年10月6日
    0
  • sql存储过程简单例题_sql存储过程实例详解

    sql存储过程简单例题_sql存储过程实例详解1、创建存储过程P1,查询每个学生的修课门数,要求列出学生学号、姓名及修课门数。createprocP1asselectStudent.StudentID,StudentName,count(CourseID)选修门数fromStudentjoinGradeonGrade.StudentID=Student.StudentIDgroupbyStudent.StudentID,StudentNamego2、创建存储过程P2,查询学生的学号、姓名、课程名、成绩

    2022年9月1日
    3
  • hibernate和mybatisplus区别_hibernate3

    hibernate和mybatisplus区别_hibernate3hibernate和mybatis区别对比

    2022年9月11日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号