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

yizhihongxing

下面我将详细讲解如何根据三条原则为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日

相关文章

  • Oracle用户自定义异常实现过程解析

    Oracle用户自定义异常实现过程解析 在Oracle数据库中,异常是指在程序运行中发生的错误或不正常情况,而“用户自定义异常”则是指由用户根据自己的需求或业务逻辑定义的异常。本文将详细讲解Oracle用户自定义异常的实现过程,并提供两条示例用于说明。 目录 创建异常 抛出异常 捕捉异常 示例一:年龄不合法的异常 示例二:用户名重复的异常 创建异常 用户自定…

    database 2023年5月21日
    00
  • MySQL联合查询实现方法详解

    MySQL联合查询实现方法详解 MySQL联合查询是一种利用UNION关键字将多个SELECT语句的结果集合并在一起的查询方式。本文将详细讲解MySQL联合查询的使用方法和注意事项。 语法格式 SELECT column1, column2, … FROM table1 UNION [ALL | DISTINCT] SELECT column1, col…

    database 2023年5月22日
    00
  • MySQL load语句详细介绍

    下面我为您详细讲解“MySQL load语句详细介绍”的完整攻略。 介绍 MySQL Load语句是一种将数据从文本文件中导入到MySQL数据库中的方法。它非常适合用于大批量导入大量数据的情况,比如将日志文件、CSV文件、或其他简单文本文件中存储的数据导入到数据库中。 语法 MySQL Load语句的语法如下: LOAD DATA INFILE ‘file_…

    database 2023年5月22日
    00
  • 百度Java面试题 前200页精选(下)

    百度Java面试题 前200页精选(下)攻略 了解面试题来源 该面试题来源于百度Java面试题前200页的精选。这200页的内容是由业内技术大佬们由自己的面试经验和积累整理而成。其中包含了面试官经常问到的知识点、考察面试者的思考能力、综合能力以及细节处理能力等等。所以使用这些面试题进行练习可以帮助我们更好地了解企业面试流程、找出自己的优劣势、发现其中不足、改…

    database 2023年5月21日
    00
  • 查看linux服务器上mysql配置文件路径的方法

    要查看Linux服务器上MySQL配置文件的路径,可以按照以下步骤进行: 1.首先登录到Linux服务器,打开终端,输入以下命令: sudo find / -name "my.cnf" 2>/dev/null 该命令会在Linux系统中查找名为”my.cnf”的MySQL配置文件,并将结果输出到终端窗口。 2.如果MySQL服务器使…

    database 2023年5月22日
    00
  • ubuntu19.04安装教程(图文步骤)

    针对”ubuntu19.04安装教程(图文步骤)”的完整攻略,我将分以下几个部分进行讲解: 准备工作 在安装Ubuntu19.04之前,需要一个可启动的Ubuntu19.04安装盘,这里我们可以通过两种方式来获取: 下载镜像文件进行制作:到Ubuntu官方网站(https://cn.ubuntu.com/)下载Ubuntu19.04的镜像文件,然后使用Ult…

    database 2023年5月22日
    00
  • redis在Windows中下载及安装、设置教程

    Redis在Windows中下载及安装、设置教程 下载Redis 在Windows系统下,我们可以从Redis官网下载Redis for windows版本,下载地址为:https://github.com/microsoftarchive/redis/releases 选择最新版本,下载后解压到我们所需的目录即可。 安装Redis 下载完成后,双击进入解压…

    database 2023年5月22日
    00
  • 实际应用中,如何将MySQL数据库迁移到其它机器?

    备份数据 在迁移MySQL数据库之前,首先需要备份数据以防数据丢失。可以使用MySQL自带的 mysqldump 工具进行备份。 命令如下: mysqldump -u [用户名] -p [密码] [数据库名] > [备份文件名].sql 例如: mysqldump -u root -p123456 testdb > testdb_backup.s…

    MySQL 2023年3月10日
    00
合作推广
合作推广
分享本页
返回顶部