简单了解添加mysql索引的3条原则

下面我将详细讲解如何根据三条原则为MySQL表添加索引:

什么是MySQL索引

在进行MySQL查询时,如果MySQL没有为表添加索引,那么查询语句执行时就会进行全表扫描,这会导致查询效率极低。而添加索引可以让MySQL在进行查询时只搜索索引列,从而提高查询效率。因此,我们可以将索引看作是对数据库中某一列或多列的引用,可以提高查询速度。

三条原则

1. 最左前缀匹配原则

在 MySQL 中,使用索引时必须从最左前缀列开始匹配,如果不是最左前缀列匹配,那么该索引将不可用。

比如,我们有一个表users,包含三列:id、name、email,我们想要通过name和email两列进行查询,因此我们需要添加一个联合索引。但必须遵守最左前缀匹配原则,如果索引是(name, email),则查询"WHERE email='123@qq.com'"是可用索引的,而查询"WHERE name='Tom'"不是可用索引的,因为name列不是最左前缀列。

2. 索引列上不能有函数 or 运算符

如果查询语句中的索引列上使用了函数或运算符,MySQL 将不会使用该索引。

比如,我们有一个表orders,包含列price,我们想要查询 price0.8 的结果小于 100 的所有行,如果添加索引(price),MySQL 将不会使用该索引,而进行全表扫描查找,因为 price0.8 不是索引列price上的值。

3. 小范围列先

如果存在两个列作为条件进行查询,那么可以采用最小范围的列作为索引列。

比如,我们有一个表product,包含两列:id和name,我们想要查询id=100,并且name like '%test%'的所有行。如果添加索引(id, name),MySQL 将会使用该索引,因为id是小范围的列,查询结果的范围比name列更小,因此应该使用id作为索引列。

示例说明

示例1:

假设我们有一个表book,包含五列:id、name、author、price、publish_time。现在我们需要通过name和author两列进行查询,因此需要添加一个联合索引。我们可以通过以下命令添加:

ALTER TABLE `book` ADD INDEX `name_author` (`name` ASC, `author` ASC);

示例2:

假设我们有一个表order,包含五列:id、user_id、status、total_price、create_time。我们需要查找create_time是2019年8月份,且status是‘已发货’的所有订单。那么我们需要添加联合索引并且按照以下方式添加:

ALTER TABLE `order` ADD INDEX `multi_idx` (`status` ASC, `create_time` ASC);

在添加该索引后,我们进行查询时,MySQL 会先使用status列过滤出相应的记录,再使用create_time过滤,从而提高查询效率。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:简单了解添加mysql索引的3条原则 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • Sql Server 索引使用情况及优化的相关Sql语句分享

    我来为您详细讲解一下“Sql Server 索引使用情况及优化的相关Sql语句分享”的攻略。 一、索引使用情况的查看 1.1 查看表索引的使用情况 使用以下命令可以查看表的索引使用情况: SELECT OBJECT_NAME(s.[object_id]) AS [Object Name], i.name AS [Index Name], s.user_see…

    database 2023年5月21日
    00
  • Oracle数据库由dataguard备库引起的log file sync等待问题

    针对“Oracle数据库由dataguard备库引起的log file sync等待问题”这一问题,我们可以采取以下步骤进行解决: 1. 确认问题以及造成问题的原因 在Oracle数据库的日志中具体查看日志等待事件的排名,以及高排名的等待事件。其中,“log file sync”等待事件通常是和等待次数最高的等待事件。该等待事件通常会被由DataGuard备…

    database 2023年5月21日
    00
  • MySQL主从复制原理剖析与应用实践

    MySQL Replication(主从复制)是指数据变化可以从一个MySQL Server被复制到另一个或多个MySQL Server上,通过复制的功能,可以在单点服务的基础上扩充数据库的高可用性、可扩展性等。 vivo 互联网服务器团队- Shang Yongxing MySQL Replication(主从复制)是指数据变化可以从一个MySQL Ser…

    MySQL 2023年4月13日
    00
  • Firebase和Impala的区别

    Firebase是一种由Google开发的云端后端服务,提供了一整套完整的工具和服务,用于帮助开发者构建和扩展基于移动和Web的应用程序。它提供了包括实时数据库、云存储、身份验证和消息传递等开发者所需的服务,并提供了易用的UI使开发者可以更加高效的完成应用程序的构建工作。 相比之下,Impala则是一种高效的分布式SQL查询引擎,是Apache Hadoop…

    database 2023年3月27日
    00
  • .net core实用技巧——将EF Core生成的SQL语句显示在控制台中

    下面是详细讲解“.net core实用技巧——将EF Core生成的SQL语句显示在控制台中”的完整攻略。 什么是EF Core? Entity Framework Core(EF Core)是一个跨平台开源ORM框架,可用于开发.NET平台上的应用程序。EF Core具有轻量级、可扩展性、高性能等优点,是.NET生态中最受欢迎的ORM框架之一。 为什么要显…

    database 2023年5月21日
    00
  • SQL Server如何插入数据示例代码

    下面为您详细讲解 SQL Server 如何插入数据示例代码的完整攻略。 1. 前置条件 在进行插入数据操作前,需要确保以下条件: 已经安装并启动 SQL Server 数据库。 已经创建了相关的数据库和表。 已经了解插入语句的基本语法和规则。 2. 插入单条数据 插入单条数据需要使用 INSERT INTO 语句,比如要向 students 表中插入一条数…

    database 2023年5月21日
    00
  • Oracle 数据仓库ETL技术之多表插入语句的示例详解

    下面我将详细讲解“Oracle 数据仓库ETL技术之多表插入语句的示例详解”的完整攻略。 1. 简介 在数据仓库ETL过程中,数据从来源端被抽取出来,然后经过转换和清洗,最后加载到目标端的数据仓库中。在这个过程中,使用多表插入语句是非常常见的一种技术。 2. 多表插入语句介绍 多表插入语句可以同时向多个表中插入数据,可以在一个SQL语句中插入多张表,从而减少…

    database 2023年5月21日
    00
  • DATASET 与 DATAREADER对象有什么区别

    DATASET 和 DATAREADER 都是 ADO.NET 中用来处理数据的对象。 DATASET DATASET 是一个内存中的数据缓存,可以理解为一个内存中的数据库,可以通过 SQL 语句和其他查询方式从数据库中获取数据,并将数据放在 DATASET 中。 DATASET 可以存储多张数据表,它存储的数据是一个不断变化的数据集,支持对数据集的增删改查…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部