如何让你的SQL查询快2600倍

初学者的数据库索引简介

> Congratulations

今天在ORM的时代,我们作为开发人员不必经常触摸数据库。我自己自己建立了我的第一个项目而不在项目内写一行的原始SQL。

它起初工作正常。但是,在一段时间后,我们有一些真实的数据,API响应时间正在增加。

为了让用户体验更好,我们试图在这里和那里优化您的应用程序,但它没有解决我们的实际问题。

很明显,查询数据库是我们申请的瓶颈。因此,我们介绍了缓存,它本身就具有自己的成本。

今天,我将解释什么是索引以及我们如何改进应用程序的性能。

开始吧…

什么是索引?

我们都知道数据库是一系列大量数据。就像一本字典。

根据字典,我们可以真正容易地找到任何单词,因为单词以某种方式保存。它们被伴随着词典(按字排序)。

> Photo by Pisit Heng on Unsplash

数据库索引是那样的。当任何新数据插入到数据库中时,创建一个单独的表,以根据我们的需要组织数据,以便我们可以更快地找到它们。

因此,索引有助于在编写数据时需要额外的时间,但它有助于读取数据更快。如果您的应用程序编写重,并且不需要读取经常读取数据,那么您可能不需要使用索引

足够的谈话!告诉我代码

好的,让我们首先创建一个具有一些基本信息的表。

第1步:创建表

我要显示你的代码主要是用postgres写的,但其他SQL语言也非常相似。

  • ID是该行的正常唯一标识符。
  • NAME 名称是一个字符串
  • SALARY 是员工的薪水
  • JOIN_DATE是一个日期类型。
Create TABLE EMPLOYEE ( ID INTEGER PRIMARY KEY , NAME VARCHAR (20), SALARY INTEGER, JOIN_DATE DATE);

第2步:生成数据

好的,现在我们需要一些数据来玩一下。为此运行以下代码。

我们不会详细介绍此代码。它所做的就是为我们产生一百万个随机的行。

如果您已有一份具有百万数据的表,那么您可以使用它。

CREATE SEQUENCE employee_id_sequence  start 1  increment 1;INSERT INTO EMPLOYEE           (ID ,NAME, SALARY, JOIN_DATE)       SELECT nextval('employee_id_sequence') ,       substr(md5(random()::text), 1, 10),       (random() * 70   10)::integer,       DATE '2018-01-01'   (random() * 700)::integerFROM generate_series(1, 1000000);

第3步:让我们找到一个名字

现在我们将尝试在我们的数据库中找到具有特定名称的用户。这是所有应用程序的常见用例。

您可以运行以下代码来执行此操作。

EXPLAIN ANALYSE SELECT * FROM USERS WHERE NAME ='cd54b20d57';

注意,解释分析我们查询的一部分是特定于Postgres。它实际上并没有运行查询。它只是分析查询并给我们一些信息。

让我们看看输出和底部,我们可以看到我们的查询执行时间为135ms

> the first query

第4步:创建索引

现在我们将在NAME字段上创建一个索引。语法适用于Postgres,但其他SQL将具有类似的格式。

CREATE INDEX ON EMPLOYEE(NAME);

它需要一些时间并创建索引。所以等待一段时间。

真理时刻

现在我们将再次运行以前的查询。

现在看到输出。

> After indexing

查询的执行时间仅降至0.051 ms!

所以我们的查询现在将更快地运行大约2600次。那是多么棒!

好,太棒了。恭喜这一点。希望你的新手(像我一样)现在可以了解索引的力量。

这是今天。快乐编码!:D.

(本文由闻数起舞翻译自undefined的文章《How to Run Queries 2600 Times Faster》,转载请注明出处,原文链接:
https://levelup.gitconnected.com/how-to-run-queries-2600-times-faster-a57506ed870f)

(0)

相关推荐