初学者的数据库索引简介
> Congratulations
今天在ORM的时代,我们作为开发人员不必经常触摸数据库。我自己自己建立了我的第一个项目而不在项目内写一行的原始SQL。
它起初工作正常。但是,在一段时间后,我们有一些真实的数据,API响应时间正在增加。
为了让用户体验更好,我们试图在这里和那里优化您的应用程序,但它没有解决我们的实际问题。
很明显,查询数据库是我们申请的瓶颈。因此,我们介绍了缓存,它本身就具有自己的成本。
今天,我将解释什么是索引以及我们如何改进应用程序的性能。
开始吧…
我们都知道数据库是一系列大量数据。就像一本字典。
根据字典,我们可以真正容易地找到任何单词,因为单词以某种方式保存。它们被伴随着词典(按字排序)。
> Photo by Pisit Heng on Unsplash
数据库索引是那样的。当任何新数据插入到数据库中时,创建一个单独的表,以根据我们的需要组织数据,以便我们可以更快地找到它们。
因此,索引有助于在编写数据时需要额外的时间,但它有助于读取数据更快。如果您的应用程序编写重,并且不需要读取经常读取数据,那么您可能不需要使用索引
好的,让我们首先创建一个具有一些基本信息的表。
我要显示你的代码主要是用postgres写的,但其他SQL语言也非常相似。
Create TABLE EMPLOYEE (
ID INTEGER PRIMARY KEY ,
NAME VARCHAR (20),
SALARY INTEGER,
JOIN_DATE DATE
);
好的,现在我们需要一些数据来玩一下。为此运行以下代码。
我们不会详细介绍此代码。它所做的就是为我们产生一百万个随机的行。
如果您已有一份具有百万数据的表,那么您可以使用它。
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)::integer
FROM generate_series(1, 1000000);
现在我们将尝试在我们的数据库中找到具有特定名称的用户。这是所有应用程序的常见用例。
您可以运行以下代码来执行此操作。
EXPLAIN ANALYSE SELECT * FROM USERS
WHERE NAME ='cd54b20d57';
注意,解释分析我们查询的一部分是特定于Postgres。它实际上并没有运行查询。它只是分析查询并给我们一些信息。
让我们看看输出和底部,我们可以看到我们的查询执行时间为135ms
> the first query
现在我们将在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)