概述
在这些年的工作之中,由于SQL问题导致的数据库故障层出不穷,而索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换。
索引问题
1、无索引
当数据库中出现访问表的SQL无索引导致全表扫描,如果表的数据量很大,扫描大量的数据,应用请求变慢占用数据库连接,连接堆积很快达到数据库的最大连接数设置,新的应用请求将会被拒绝导致故障发生。
2024年07月23日
在这些年的工作之中,由于SQL问题导致的数据库故障层出不穷,而索引问题是SQL问题中出现频率最高的,常见的索引问题包括:无索引,隐式转换。
1、无索引
当数据库中出现访问表的SQL无索引导致全表扫描,如果表的数据量很大,扫描大量的数据,应用请求变慢占用数据库连接,连接堆积很快达到数据库的最大连接数设置,新的应用请求将会被拒绝导致故障发生。
2024年07月23日
在MySQL中,无论是Innodb还是MyIsam,都使用了B+树作索引结构(这里不考虑hash等其他索引)。本文将从最普通的二叉查找树开始,逐步说明各种树解决的问题以及面临的新问题,从而说明MySQL为什么选择B+树作为索引结构。
2024年07月23日
索引的目的在于提高查询效率,其功能可类比字典,通过该索引可以查询到我们想要查询的信息,因此,选择建立好的索引十分重要,以下是为Mysql优化选择最佳索引的方法步骤: 1. 首先列出查询中所有使用的表,并为查询中的每个子查询创建一个独立的列表。如果有一个包含 2 个 SELECT 子查询的 SELECT 查询,应该建立 3 个列表,每个列表包含引用在其中的表。在此过程结束时,就会在每个查询列表中为每个表添加一个列的列表。 2. 在任何索引中最左边的列应与查询相等比较匹配,可以添加多个列,只要所有列与常量进行比较相等即可。 3.选择一个列,这将是范围列,MySQL 在每个索引中只支持一个范围列,需使用范围运算符(<>, >, <, IN(), BETWEEN, LIKE)来查看所有的比较,并选择可以过滤最多行数的那个,将该列给该表添加为索引中的下一列。 4. 如果查询中不存在范围列,可以添加 GROUP BY 子句中的列。 5. 如果查询中不存在范围列,并且没有 GROUP BY 子句,则可以添加 ORDER BY 子句中的列。 6. 在某些情况下,创建一个独立的索引来保存 ORDER BY 子句的列是有意义的,因为 MySQL 有时会选择使用它。请注意,尽管如此,索引应该包含 ORDER BY 子句中的所有列,它们应该全部在 ORDER BY 子句中用相同的顺序(ASC / DESC)指定。这并不能保证数据库的优化器会选择这个索引而不是 WHERE 复合索引,但是值得一试。 7. 最后,从 SELECT 子句中添加相关的列,这可能允许 MySQL 使用索引作为覆盖索引。覆盖索引是包含过滤和查询子句中的所有列的索引。这样的索引允许数据库仅通过使用索引运行查询,而不需要访问表。在许多情况下,这种方法显然更快。 以上是Mysql优化选择最佳索引的方法,对于有这方面需求的人员来说,可以尝试一下,相信会有所收获!
2024年07月23日
在firstname、lastname、age这三个列上分别创建单列索引,效果是否和创建一个firstname、lastname、age的多列索引一样呢?当然不是的,两者完全不同。
2024年07月23日
来源:慕课网专栏《一线数据库工程师带你深入理解 MySQL》
地址:https://www.imooc.com/read/43
作者:马听老师
比如一本比较厚的书,我们需要找到对应的知识点,我们的习惯一般都是先看目录,根据目录去找到对应的知识点。试想一下,假如这本比较厚的书没有目录,我们就需要从前面到后面一页一页的找,直到找到对应的知识点,这个过程估计得耗费一段时间了。
2024年07月23日
索引 就是为了提高数据查询的效率,就像书的目录一样,我们可以借助目录快速找到某个知识点所在的页。同样,对于数据库的表而言,索引其实就是表数据的“目录”。