如何通过索引大表格来提高数据库的性能
#编程 #postgres #database #性能

什么是数据库索引?

数据库索引是一种使从数据库中搜索和检索数据的技术。就像创建快速指南以在大书中查找信息一样。它有助于加快搜索并使寻找事情更容易。

索引加快选择查询和从句的位置。另一方面,减慢插入和更新查询。

Index Data Structure Components

图:数据库索引数据结构

为什么要索引?

想象您有一个书籍数据库,您想在标题中找到所有具有“编程”一词的书籍。如果没有索引,数据库将不得不扫描表中的每一行才能找到与搜索条件相匹配的书籍。这可能需要很长时间,特别是如果桌上有很多书。

但是,如果您在标题列上创建索引,则数据库可以快速找到与搜索条件匹配的行。索引是单独的数据结构,可按排序顺序存储标题列的值。数据库可以使用索引快速找到标题中包含“编程”一词的行。

用5000万行索引桌子

在此示例中,我们将在包含列的PostgreSQL中创建一个数据库pg-millionfirst_namelast_namelast_namemobile_nocountry

插入5000万行的随机数据

CREATE TABLE customers(first_name VARCHAR(50), last_name VARCHAR(50), mobile_no INTEGER, country VARCHAR(50))

INSERT INTO customers (first_name, last_name, mobile_no, country)
SELECT substr(md5(random()::text), 1, 10),
       substr(md5(random()::text), 1, 10),
       (random() * 70 + 10)::integer,
       (CASE WHEN random() < 0.5 THEN 'India' ELSE 'United Kingdom' END)
FROM generate_series(1, 50000000);

country列上创建索引

我们在country列上创建一个索引,以拥有一个井井有条的列表,该列表使我们可以快速找到来自特定国家 /地区的所有客户,而无需浏览整个列表。

CREATE INDEX idx_partial_country ON customers (country) WHERE country IN ('India', 'United Kingdom')

是时候创建索引:2m 2s

在此示例中,我们正在使用partial indexes。基于过滤特定值行的条件创建部分索引。这允许数据库索引并仅优化相关行,减少索引大小并改善这些特定值的查询性能。

注意:用于创建索引和类型索引的语法在不同数据库之间有所不同。您应该根据数据库和用例使用适当的语法和索引类型。

测量索引前后的查询执行时间

考虑以下查询

SELECT * FROM customers WHERE country='United Kingdom';

查询执行时间没有索引:41836.270 ms

查询索引执行时间:24254.644 ms

Improvement in query execution time ~42.03%

(为了更好地理解,您可以找到所有代码here

索引的表现如何?

重要的是要了解指数有效性。一些有用的指标包括:

  • 索引使用统计信息:监视索引的用法以了解哪些索引正在积极促进查询性能。 (例如:跟踪索引的大小,因为较大的索引可能会影响磁盘空间和I/O性能)

  • 查询性能指标:监视涉及索引列的查询的查询执行时间和响应时间。 (例如:查询执行时间突然增加可能表明与索引有关的问题。)

  • 索引维护指标:定期评估索引的健康及其对数据库操作的影响。 (例如:由于插入过多,更新或删除而导致索引效率低下时发生的轨道索引膨胀。)

什么时候使用索引?

  • 频繁的搜索查询:当您经常在大数据集中搜索特定数据时,请使用索引。它有助于快速找到所需的信息。

  • 性能改进:索引可以通过避免扫描整个数据集来提高数据检索操作的速度,尤其是对于复杂查询的速度。

  • 大数据量:处理相当大的数据时使用索引,因为它有助于维持有效的查询性能。

什么时候不使用索引?

  • 频繁的写操作:如果您的数据库经常插入,更新或删除操作,请避免过度索引,因为索引可以减慢这些写操作并消耗其他存储空间。 索引不应在经常被操纵的列上使用。

  • 小数据集:对于相对较小的数据集,索引可能无法提供显着的性能提升,并且可以引入不必要的开销。在这种情况下,收益可能不会超过成本。

结论

如果您正在寻找改善数据库性能的方法,则数据库索引是一个不错的起点。通过在查询中经常使用的列上创建索引,您可以显着提高数据库的性能并更快地使查询。但是,重要的是在做出决定之前权衡索引的好处和缺点。


如果您喜欢阅读的内容,请考虑subscribing to my newsletter
GitHubTwitter

上找到我