发布于 2026-01-06 0 阅读
0

提高 PostgreSQL 查询性能

提高 PostgreSQL 查询性能

最近我想实现一些原始 SQL 查询,并提高它们的效率,以便更快地从数据库返回数据。在阅读了一些文章并自己进行了一些修改后,我决定在这里总结一下,希望能对你的项目有所帮助 :)

现在,我们来聊聊PostgreSQL。它是一个超级酷炫且灵活的开源关系型数据库管理系统。虽然PostgreSQL本身已经非常出色,但总有提升查询速度的空间!想知道怎么做吗?我们有一些巧妙的策略可以大幅提升你的PostgreSQL查询速度。

享受!

限制查询返回的行数

对于小型表,我们可能不需要关心返回的行数(尽管我强烈建议还是限制一下!),但对于大型表,这对于提高查询性能非常有用。

我们可以使用 SQL 中的关键字LIMIT和以下查询来实现这一点:

SELECT * FROM products LIMIT 10
Enter fullscreen mode Exit fullscreen mode

使用JOIN子查询代替

如果表中有很多记录,运行包含子查询的查询可能效率不高——我们可以使用JOIN关键字,速度会快得多。

而不是使用如下所示的子查询:

SELECT * FROM orders WHERE product_id IN (SELECT id FROM products WHERE name = 'Phone');
Enter fullscreen mode Exit fullscreen mode

我们可以使用JOIN这样的关键词:

SELECT orders.* FROM orders JOIN products ON orders.product_id = products.id WHERE products.name = 'Phone';
Enter fullscreen mode Exit fullscreen mode

如果你的表格包含大量行,这样做速度会快得多。

列应使用高效的数据类型。

对于频繁进行计算的行,average检查列的数据类型会很有帮助。例如,使用 `int`smallint比使用 `int` 更高效integer。您可以按如下方式更改:

ALTER TABLE products ALTER COLUMN price TYPE smallint;
Enter fullscreen mode Exit fullscreen mode

用于PREPARE频繁执行的查询

如果您知道某些查询会频繁执行,例如 Fetch_Popular_Products_Query,则可以使用PREPARE如下关键字:

PREPARE get_products_by_name (text) AS SELECT * FROM products WHERE name = $1;
EXECUTE get_products_by_name('Phone');
Enter fullscreen mode Exit fullscreen mode

通过这种方法,查询只需准备一次,即可重复执行,从而提高性能。

用于INDEX频繁查询

如果您经常按产品名称搜索产品,可以name按如下方式创建列索引:

CREATE INDEX products_name_idx ON products (name);
Enter fullscreen mode Exit fullscreen mode

如果在常规查询中使用多个关键词,效果会更好WHEREJOIN

请勿使用通配符

假设我们有一个查询,它会搜索所有产品,找出名称以“:”结尾的产品phone

SELECT * FROM products WHERE name LIKE '%phone';
Enter fullscreen mode Exit fullscreen mode

此查询将对整个products表执行顺序扫描,如果表很大,则速度可能会很慢。为了优化此查询,您可以将其重写如下:

SELECT * FROM products WHERE name LIKE 'phone%';
Enter fullscreen mode Exit fullscreen mode

此查询将使用上一步创建的索引,并执行速度更快的索引扫描。

EXPLAIN使用关键字调试查询

EXPLAIN命令将输出查询的执行计划,这可以帮助您识别任何性能问题,您可以按如下方式使用它:

EXPLAIN SELECT COUNT(*) FROM products JOIN orders ON products.id = orders.products_id;
Enter fullscreen mode Exit fullscreen mode

使用全文搜索服务,通过查询/ID 更快地进行搜索。

在数百万条记录中按名称(或更复杂的情况,按名称的一部分)查找特定记录可能非常缓慢。为了解决这个问题,您可以实现一个功能齐全的搜索服务,例如ElasticSearch,它可以显著提高速度。

具体来说,就是将键/值对以键值对的形式存储在 ElasticSearch 数据库中POSTGRESQL_ID/RECORD_NAME,然后搜索这些值以查找完整的或部分名称和分配的 PostgreSQL ID,最后执行 PostgreSQL 查询,WHERE id = 'POSTGRESQL_ID'这样WHERE name LIKE 'RECORD_NAME'可以显著提高性能,因为您将查询特定记录,而不是查询符合某些搜索条件的记录。

这种方法在性能和优化查询方面看起来非常棒,但您必须考虑到,它会给您的基础架构增加额外的复杂性,并增加一项您需要维护的服务。

📖了解更多

如果您想了解更多关于 Vue、Nuxt、JavaScript 或其他实用技术的信息,请点击此链接或点击下方图片访问 VueSchool:

Vue 学校链接

它涵盖了构建现代 Vue 或 Nuxt 应用程序时最重要的概念,可以帮助你完成日常工作或业余项目 😉

✅ 摘要

做得好!你刚刚学会了如何在 Vue 中检查插槽是否为空。

保重,下次见!

祝您编程愉快,一如既往🖥️

文章来源:https://dev.to/jacobandrewsky/improving-performance-of-postgresql-queries-1h7o