数据库优化:探索 SQL 中的索引

这篇具有很好参考价值的文章主要介绍了数据库优化:探索 SQL 中的索引。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

推荐:使用 NSDT场景编辑器 助你快速搭建可编辑的3D应用场景

在一本书中搜索特定主题时,我们将首先访问索引页面(该页面位于该书的开头),并找到包含我们感兴趣的主题的页码。现在,想象一下在没有索引页的书中找到特定主题是多么不方便。为此,我们必须搜索书中的每一页,这非常耗时且令人沮丧。

当 SQL Server 从数据库中检索数据时,它也会出现类似的问题。为了克服这个问题,SQL Server还使用索引来加快数据检索过程,在本文中,我们将介绍该部分。我们将介绍为什么需要索引以及如何有效地创建和删除索引。本教程的先决条件是 SQL 命令的基本知识。

什么是索引?

索引是一个架构对象,它使用指针从行中检索数据,从而减少查找数据的 I/O(输入/输出)时间。索引可以应用于我们要搜索的一个或多个列。它们将列存储在称为 B 树的单独数据结构中。B-Tree的主要优点之一是它以排序顺序存储数据。

如果您想知道为什么如果对数据进行排序可以更快地检索数据,那么您必须阅读线性搜索与二分搜索。

索引是提高 SQL 查询性能的最著名的方法之一。它们体积小、速度快,并且针对关系表进行了显著优化。当我们想要搜索没有索引的行时,SQL 会线性执行全表扫描。换句话说,SQL必须扫描每一行才能找到匹配条件,这是非常耗时的。另一方面,如上所述,索引使数据保持排序。

但是我们也应该小心,索引会创建一个单独的数据结构,这需要额外的空间,当数据库很大时,这可能会成为问题。出于良好做法,索引仅对常用列有效,可以避免对很少使用的列使用。以下是索引编制可能有用的一些情况,

  1. 行数必须为 (>10000)。
  2. 必需列包含大量值。
  3. 必需的列不得包含大量 NULL 值。
  4. 如果我们经常根据特定列对数据进行排序或分组,这将很有帮助。索引快速检索排序后的数据,而不是执行完全扫描。

在以下情况下可以避免索引,

  1. 桌子很小。
  2. 或者当列的值很少使用时。
  3. 或者当列的值频繁更改时。

当优化程序检测到全表扫描花费的时间少于索引表时,也可能不使用索引,即使它存在也是如此。当表较小或列频繁更新时,可能会发生这种情况。

创建示例数据库

在开始之前,您必须在PC上设置MySQL工作台才能轻松遵循本教程。您可以参考此YouTube视频来设置工作台。

设置工作台后,我们将创建一些随机数据,从中可以执行查询。

创建表:

-- Create a table to hold the random data

CREATE TABLE employee_info (id INT PRIMARY KEY AUTO_INCREMENT,
                                               name VARCHAR(100),
                                                    age INT, email VARCHAR(100));

插入数据:

-- Insert random data into the table

INSERT INTO employee_info (name, age, email)
SELECT CONCAT('User', LPAD(ROW_NUMBER() OVER (), 5, '0')),
       FLOOR(RAND() * 50) + 20,
       CONCAT('user', LPAD(ROW_NUMBER() OVER (), 5, '0'), '@xyz.com')
FROM information_schema.tables
LIMIT 100;

它将创建一个名为具有名称、年龄和电子邮件等属性的表。employee_info

显示数据:

SELECT *
FROM employee_info;

输出:

数据库优化:探索 SQL 中的索引,数据库,sql

创建和删除索引

为了创建索引,我们可以像这样使用 CREATE 命令,

语法:

CREATE INDEX index_name ON TABLE_NAME (COLUMN_NAME);

在上面的查询中,是索引的名称,是表的名称,是我们要应用索引的列的名称。index_nametable_namecolumn_name

前任-

CREATE INDEX age_index ON employee_info (age);

我们还可以为同一表中的多列创建索引,

CREATE INDEX index_name ON TABLE_NAME (col1,
                                       col2,
                                       col3, ....);

唯一索引: 我们还可以为特定列创建一个唯一索引,该索引不允许在该列中存储重复值。这样可以保持数据的完整性,并进一步提高性能。

CREATE UNIQUE INDEX index_name ON TABLE_NAME (COLUMN_NAME);

注意: 可以为PRIMARY_KEY和 UNIQUE 列自动创建索引。我们不必手动创建它们。

删除索引:

我们可以使用 DROP 命令从表中删除特定索引。

DROP INDEX index_name ON TABLE_NAME;

我们需要指定索引和表名来删除索引。

显示索引:

您还可以查看表中存在的所有索引。

语法:

SHOW INDEX
FROM TABLE_NAME;

前任-

SHOW INDEX
FROM employee_info;

输出:

数据库优化:探索 SQL 中的索引,数据库,sql

更新索引

以下命令在现有表中创建新索引。

语法:

ALTER TABLE TABLE_NAME ADD INDEX index_name (col1, col2, col3, ...);

注意: ALTER 不是 ANSI SQL 的标准命令。因此,它可能因其他数据库而异。

例如

ALTER TABLE employee_info ADD INDEX name_index (name);

SHOW INDEX
FROM employee_info;

输出:

数据库优化:探索 SQL 中的索引,数据库,sql

在上面的示例中,我们在现有表中创建了一个新索引。但是我们不能修改现有的索引。为此,我们必须首先删除旧索引,然后创建一个新的修改索引。

例如

DROP INDEX name_index ON employee_info;


CREATE INDEX name_index ON employee_info (name, email);

SHOW INDEX
FROM employee_info ;

输出:

数据库优化:探索 SQL 中的索引,数据库,sql

总结

在本文中,我们介绍了对 SQL 索引的基本了解。还建议保持索引范围较窄,即限制为几列,因为更多的索引可能会对性能产生负面影响。索引加快了 SELECT 查询和 WHERE 子句的速度,但减慢了插入和更新语句的速度。因此,仅对常用列应用索引是一种很好的做法。

在那之前,继续阅读并继续学习。

原文链接:数据库优化:探索 SQL 中的索引 (mvrlink.com)文章来源地址https://www.toymoban.com/news/detail-633361.html

到了这里,关于数据库优化:探索 SQL 中的索引的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 关于数据库SQL优化

      在项目上线初期,业务数据量相对较少,SQL的执行效率对程序运行效率的影响可能不太明显,因此开发和运维人员可能无法判断SQL对程序的运行效率有多大。但随着时间的积累,业务数据量的增多,SQL的执行效率对程序的运行效率的影响逐渐增大,此时对SQL的优化就很有必

    2024年02月08日
    浏览(60)
  • SQL笔记 -- 数据库结构优化

    不常用的数据为冷数据,反之则为热数据。如果一个表中的数据存在明显的使用频率差异,那么可以将冷热数据分离。通过这种分解可以提高表的查询效率。对于字段很多且有些字段使用不频繁的表,可以通过这种分解的方式来优化数据库的性能。 例如: 会员members表存储会

    2024年01月22日
    浏览(59)
  • MySQL数据库进阶第二篇(索引,SQL性能分析,使用规则)

    本篇博客深入详细地介绍了数据库索引的概念和重要性。内容包含:索引的概念和目标、索引的优点与缺点。此外,博客还深入解析了三种主要的索引结构:B-Tree、B+Tree和Hash,提供了详细的结构解析和优化方法,并通过插图进一步增强了理解。 博客的部分内容专注于对B-Tr

    2024年02月21日
    浏览(64)
  • 【MySQL 数据库】7、SQL 优化

    ① 批量插入数据 ② 手动控制事务 ③ 主键顺序插入,性能要高于乱序插入 主键乱序插入 : 8 1 9 21 88 2 4 15 89 5 7 3 主键顺序插入 : 1 2 3 4 5 7 8 9 15 21 88 89 【☆】 】 ① 如果需要一次性插入大批量数据(百万级别),使用 insert 语句插入性能 很低 ② 可使用 MySQL 数据库提供的 loa

    2024年02月08日
    浏览(60)
  • SQL Server 数据库优化分享

           随着数据量和业务复杂性的增加,数据库优化变得越来越重要。通过对 SQL Server 数据库进行优化,您可以提高查询性能、减少资源消耗,从而改善整体系统性能。以下是一些优化技巧,可帮助您实现更高效、更可靠的数据库操作。 使用恰当的索引: 索引是一种提供快

    2024年02月11日
    浏览(53)
  • smartsofthelp 5.0 最专业的数据库优化工具,数据库配置优化,数据库高并发优化,SQL 语句优化...

      下载地址:百度网盘 请输入提取码 SQL操作返回历史记录: 2023-08-21 20:42:08:220  输入:select @@version as 版本号 2023-08-21 20:42:08:223  输出:当前数据库实例版本号:Microsoft SQL Server 2012 - 11.0.2100.60 (X64)      Feb 10 2012 19:39:15      Copyright (c) Microsoft Corporation     Developer Edition (

    2024年02月12日
    浏览(59)
  • 探索SQL深入理解数据库操作的关键概念与技巧【文末送书】

    SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准化语言。无论是在开发应用程序、进行数据分析还是进行数据库管理,掌握SQL都是至关重要的。本文将从入门级别开始,逐步引导您了解SQL语言的基础知识,直到掌握高级技巧。 创建数据库 首先

    2024年04月22日
    浏览(70)
  • 【数据库】sql优化有哪些?从query层面和数据库层面分析

    这类型问题可以称为:Query Optimization,从清华AI4DB的paper list中,该类问题大致可以分为: Query Rewriter Cardinality Estimation Cost Estimation Plan Optimization 从中文的角度理解那就是: 查询重写 基数估计 成本估计 执行计划优化 可以发现,这类型的优化问题,大多数从sql本身,或者说从

    2024年01月17日
    浏览(53)
  • 百万级sql server数据库优化案例分享

            在我们的IT职业生涯中,能有一次百万级的数据库的优化经历是很难得的,如果你遇到了恭喜你,你的职业生涯将会更加完美,如果你遇到并解决了,那么一定足够你炫耀很多年。         这里我将要分享一次完美的百万级数据库优化经历,希望能给在IT行业的小

    2024年02月17日
    浏览(74)
  • 【数据库】sql server 中的sql语句--增删改查

    上面是要建立的数据库 下面是sql语句:  

    2024年02月05日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包