如何让你的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)