首页 > 数据库 >linux MySQL数据库索引

linux MySQL数据库索引

时间:2023-07-16 16:33:51浏览次数:47  
标签:创建 数据库 MySQL 性能 查询 索引 linux 主键

索引在数据库中占有重要地位,当高并发时,一条一条的查找数据是很慢的,但是索引可以分流,可以快速定位,解决高并发。

目录

一、索引概念

二、索引作用

三、索引的应用

四、索引分类

五、索引的创建

六、索引的管理

七、总结

 

 

 

 

一、索引概念

   1.索引概念

    数据库索引是一种排序的数据结构,它包含了索引值和对应数据行的物理地址。使用索引可以避免全表扫描,快速定位到需要的数据行,从而提高数据库查询速度。可以将索引类比为书的目录,通过目录中的页码可以快速找到所需的内容。索引可以基于一个或多个表列的值排序,并且它的主要目的是加快对表中记录的查找或排序。建立索引可以大幅提高数据库查询和排序性能。

   2.索引背景

    数据库索引的发展可以追溯到关系型数据库的出现。早期的数据库系统仅支持全表扫描,这意味着查询速度会随着数据量的增加而变慢。为了解决这个问题,数据库开发人员开始探索新的数据结构,例如B树和B+树。这些数据结构可以在不进行全表扫描的情况下快速定位到需要的数据行,从而提高查询速度。

二、索引作用

    1.索引作用

      创建合适的索引可以大大加快数据库查询速度,这是创建索引的主要原因。当表很大或查询涉及到多个表时,使用索引可以提高查询速度成千上万倍。通过使用索引,可以降低数据库的IO和排序成本。通过创建唯一性索引,可以保证数据表中每一行数据的唯一性。使用索引可以加快表与表之间的连接,以及在使用分组和排序时,可以大大减少分组和排序的时间。因此,合理使用索引是提高数据库性能的关键。

    2.索引的弊端 

      有以下几个方面需要注意:

    1. 索引需要占用额外的磁盘空间,特别是对于大型数据库而言,索引文件可能会占用相当大的磁盘空间。在 MyISAM 引擎中,数据文件和索引文件是分离的,而 InnoDB 引擎中的表数据文件本身就是索引文件,因此索引对磁盘空间的占用情况因引擎而异。

    2. 在插入和修改数据时,索引也需要随之变动,这可能会导致一些性能问题。当新的数据被插入时,需要更新索引以反映新的数据位置。当数据被修改时,索引也需要被更新以反映新的数据值。这些操作都需要花费额外的时间,因此在进行大量数据插入或修改操作时,需要谨慎考虑索引的使用。

    3. 在某些情况下,索引可能会降低查询性能。例如,如果索引不是基于经常查询的列,或者索引的选择性非常低,那么索引可能会导致查询变慢。因此,在创建索引时需要权衡索引的选择性和查询的频率,以确保索引能够提高查询性能。

    综上所述,索引虽然可以提高数据库的查询性能,但也需要考虑到一些潜在的性能问题和空间开销。在实际使用中,需要根据具体情况权衡使用索引的利弊。

 

三、索引的应用

    1.索引的创建原则  

索引并不是在所有情况下都适合使用。虽然索引可以提高数据库查询的速度,但是不恰当地使用索引会带来一些负面影响,例如增加系统资源的消耗和查询性能的下降等。因此,在创建索引时需要谨慎考虑以下几个因素:

    1. 表的主键和外键必须有索引,因为主键具有唯一性,外键关联的是子表的主键,查询时可以快速定位。

    2. 记录数超过300行的表应该有索引,如果没有索引,需要遍历整个表,这会严重影响数据库的性能。

    3. 经常与其他表进行连接的表,在连接字段上应该建立索引。

    4. 唯一性太差的字段不适合建立索引。

    5. 更新太频繁的字段不适合创建索引,因为频繁的更新会导致索引不断变化,影响数据库性能。

    6. 经常出现在 where 子句中的字段,特别是大表的字段,应该建立索引。

    7. 索引应该建在选择性高的字段上,这样可以减少索引的重复性,提高查询性能。

    8. 索引应该建在小字段上,对于大的文本字段或超长字段,不要建立索引,因为这会导致索引占用过多的磁盘空间,影响数据库性能。

总之,在创建索引时需要考虑到各种因素,权衡索引的利弊,以确保索引能够提高数据库的查询性能,而不是影响数据库的性能。

 

    2.索引应用场景

    索引是数据库优化的重要手段之一,可以大幅提高查询性能。以下是一些适合使用索引的场景:

    1. 经常使用的查询条件:如果一个查询条件经常被使用,例如用户ID或日期范围,那么在该列上创建索引可以大大提高查询性能。

    2. 外键关联:外键关联是数据库中经常出现的情况。在外键字段上创建索引可以加快关联查询的速度。

    3. 多表连接:如果一个查询涉及到多个表,那么在连接字段上创建索引可以加快查询速度。

    4. 分组和排序:如果一个查询需要分组或排序,那么在分组或排序字段上创建索引可以大大提高查询性能。

    5. 大数据量的表:如果一个表中包含大量的记录,那么在查询时需要花费大量的时间来定位记录。在该表的常用查询列上创建索引可以大大提高查询性能。

  在使用索引时需要注意的是,过多或错误地使用索引可能会导致性能下降。因此,需要根据具体情况进行权衡,选择合适的索引策略。同时,也需要注意索引对数据库性能的影响,避免过度索引。

 

四、索引分类

   1.索引分类

    主键索引、唯一索引、普通索引、全文索引和组合索引都是常见的索引类型。它们的主要区别在于索引的实现方式和应用场景。

    1. 主键索引:主键索引是一种唯一索引,用于标识表中每一行数据的唯一性。主键索引可以加快对表中数据的访问速度,同时也可以提高数据的完整性和一致性。主键索引通常是在表的主键列上创建的,可以通过自增ID或唯一标识符等方式创建。

    2. 唯一索引:唯一索引用于确保表中某一列的唯一性。唯一索引可以用于加速查找和避免重复插入数据。与主键索引不同的是,唯一索引可以在表的任何列上创建,而不一定是主键列。

    3. 普通索引:普通索引也称为非唯一索引,用于加速对表中数据的查找和排序。普通索引可以在表的任何列上创建,包括数字型、字符型和日期型等列。

    4. 全文索引:全文索引用于对文本内容进行搜索。全文索引可以在文本中查找关键词并返回相关的记录。全文索引适用于处理大量文本数据的场景,例如搜索引擎。

    5. 组合索引:组合索引是一种在多列上创建的索引,用于加速对多个列的组合查询。组合索引可以提高查询性能,同时也可以减少索引文件的数量,节约磁盘空间。

      总之,在实际使用中,需要根据数据的特点和应用场景选择适合的索引类型,以提高数据库的查询性能和数据的完整性。同时,也需要注意索引的使用不当可能会带来一些负面影响,例如增加系统资源的消耗和查询性能的下降等。

 

五、索引的创建

  1.普通索引

    (1)直接创建

      创建普通索引

      查看普通索引

      (2)创建表的方式创建普通索引

        创建表时创建索引

         查看索引

  (3)修改表方式创建

    alter添加索引

       查看索引

 

   2、唯一索引  

    与普通索引类似,但区别是唯一索引列的每个值都唯一。
    唯一索引允许有空值(注意和主键不同)。如果是用组合索引创建,则列值的组合必须唯一。添加唯一键将自动创建唯一索引。

      (1)直接创建唯一索引

       查看唯一索引

     (2)修改表方式创建

     查看唯一索引

 

    (3)创建表的方式创建   

     查看唯一索引

   3、主键索引

    主键索引是一种特殊的唯一索引,必须指定为“PRIMARY KEY”。
    一个表只能有一个主键,不允许有空值。 添加主键将自动创建主键索引。

    (1)创建表时创建索引

       查看索引

     (2)修改表方式创建

      创建索引

 

   4、组合索引    

    可以是单列上创建的索引,也可以是在多列上创建的索引。需要满足最左原则,因为select语句的 where条件是依次从左往右执行的,所以在使用select 语句查询时where条件使用的字段顺序必须和组合索引中的排序一致,否则索引将不会生效。

    (1)创建表时创建索引

     查看索引

   5、全文索引

    适合在进行模糊查询的时候使用,可用于在一篇文章中检索文本信息。

    (1)直接创建索引

      创建索引

     查询索引

     (2)修改表方式创建

     查询表索引

     (3)创建表的时候指定索引

     查询索引

 

六、索引的管理

    1.查询索引

        (1)show index from 表

       (2)show keys from 表名;

         (3)show create table 表;

 

 

    2.删除索引

       (1)直接删除

          原本的索引

     直接删除

 

    id索引直接删除

   (2)修改表方式删除索引

     (3)删除主键索引

      查看原来的索引

     删除后没有

 扩展:使用解释函数explain,只需添加在sql语句之前即可

 

七、总结

    索引是数据库中用于提高查询性能的重要工具,可以加速对表中数据的查找、排序和过滤操作。常见的索引类型包括主键索引、唯一索引、普通索引、前缀索引、全文索引和组合索引等。不同类型的索引适用于不同的场景和数据类型,需要根据具体情况选择合适的索引类型,以提高数据库的查询性能。同时,索引的使用也需要注意不当可能会带来一些负面影响,例如增加系统资源的消耗和查询性能的下降等。因此,在使用索引时应该权衡其使用的成本和收益,并进行必要的优化和调整,以获得最佳的查询性能和数据完整性。可以使用explain查看是否使用索引。

标签:创建,数据库,MySQL,性能,查询,索引,linux,主键
From: https://www.cnblogs.com/zhende/p/17557874.html

相关文章

  • 考勤打卡mysql表
    如何实现考勤打卡MySQL表1.整体流程为了实现考勤打卡功能,我们需要创建一个MySQL表来存储每个员工的打卡记录。下面是整个过程的步骤概述:步骤描述1.创建数据库和表首先创建一个数据库,并在该数据库中创建一个表来存储员工的打卡记录。2.连接数据库使用代码连......
  • linux 内存管理 --- 用户空间 malloc 内存申请原理
    相对于栈而言,堆这片内存面临着一个稍微复杂的行为模式:在任意时刻,程序可能发出请求,要么申请一段内存,要么释放一段已经申请过的内存,而且申请的大小从几个字节到几个GB都有可能,我们不能假设程序一次申请多少堆空间,因此,堆的管理显得较为复杂。那么,使用malloc()在堆上分配内存到底是......
  • 数据库(SQL注入问题、视图、触发器、事务、存储过程、内置函数、流程控制、索引)
    SQL注入问题SQL注入的原因:由于特殊符号的组合会产生特殊的效果 实际生活中,尤其是在注册用户名的时候会非常明显的提示你很多特殊符号不能用,会产生特殊的效果。结论:涉及到敏感数据部分,不要自己拼接,交给现成的方法拼接即可。importpymysql#链接MySQL服务端conn=pymysql.......
  • MySQL 的全局锁、表锁和行锁
    在前一篇文章我讲了下MySQL的全局锁、表记锁和行级别锁,其中行级锁只提了概念,并没有具体说。因为行级锁加锁规则比较复杂,不同的场景,加锁的形式还不同,所以这次就来好好介绍下行级锁。对记录加锁时,加锁的基本单位是next-keylock,它是由记录锁和间隙锁组合而成的,next-keylock......
  • 用python爬去电影评分保存进mysql
    用Python爬取电影评分保存进MySQL在今天的数字化时代,电影评分是人们选择观看电影的重要参考因素之一。那么,如何通过Python爬取电影评分数据,并保存到MySQL数据库中呢?本文将为你提供一种简单的方法来实现这个目标。准备工作在开始之前,我们需要确保已经安装了Python和MySQL,并且已经......
  • MySQL为什么不建议使用delete删除数据?
    这篇文章我会从InnoDB存储空间分布,delete对性能的影响,以及优化建议方面解释为什么不建议delete删除数据。InnoDB存储架构从这张图可以看到,InnoDB存储结构主要包括两部分:逻辑存储结构和物理存储结构。逻辑上是由表空间tablespace—> 段segment或者inode—>区Extent——>......
  • Oracle 12c for Linux安装手册
    Oracle安装前配置关闭防火墙及selinux、修改主机名和host文件vi/etc/selinux/configselinux=disabledserviceiptablesstopchkconfig iptables off/etc/sysconfig下面的network文件HOSTNAME=hostname在/etc/hosts文件最后添加x.x.x.xhostname安装依赖包yum-......
  • MySQL锁
    全局锁对数据库加锁,典型使用场景是全库备份。加全局读锁,整库只读:Flushtableswithreadlock(FTWRL)。针对全库只读,不使用setglobalreadonly=true,使用FTWRL的原因:1.readonly的值可能用来做逻辑判断,例如判断是主库还是备库。2.FTWRL在客户端异常断开连接后自动释放全局锁,re......
  • MySQL主备
    MySQL主备同步原理1备库io_thread通过长连接获取主库的binlog2备库sql_thread执行binlog节点A和B之间互为主备关系,都认为对方是主,切换时不用再修改主备关系。解决双Mbinlog循环同步问题1A更新的事务,binlog记的是A的serverid2B同步后生成的binlog的serverid也是A的serveri......
  • mysql安装
    安装方式选择:二进制、源码、yum安装(生产选择二进制安装)参考链接:https://www.cnblogs.com/yyxianren/p/11319544.html1.卸载默认安装的mariadb:  yumremovemariadb*-y2.添加mysql用户:  useradd-s/sbin/nologin-Mmysql3.解压tar文件并移动到指定目录,并赋权: ......