10倍提升你的SQL查询速度
当前位置:点晴教程→知识管理交流
→『 技术文档交流 』
作为一名数据分析师,SQL是必备技能之一。其优势也比较明显:易于理解,维护和扩展。然而,最大的挑战在于,随着数据量的增加,我们就会遇到延迟的瓶颈,或者说查询太昂贵(耗时)而无法运行。 在这篇文章中我将会给出一些克服瓶颈的经验,这些 tips 也许会让延迟减小10倍甚至100倍。So,让我们一起深入了解吧。 1. 理解 SQL 的查询顺序SQL 就像一个迷你版的编程语言,它按顺序处理数据。 使用诸如“ 2. 用星型模式加快查询速度在数据库设计中,数据工程师喜欢对数据库进行规范化,减少数据表之间的冗余,从而优化存储、理清数据关系。然而,凡事皆有利弊,与之对应的缺点是查询时需要多个连接和子查询来对数据进行非规范化以提取所需的信息。
为了加快查询速度,建议首先对维度表进行非规范化或联接,因为维度表通常较小并且联接速度更快。之后,如果可能的话,与大型事实表连接。在上述情况下,请尝试在查询的最后一步处理大型销售表。根据前人的实践经验,遵循这一理念通常可以将查询速度提高 10 倍左右。 3. 通过了解关键索引将查询速度提高 100 倍在下面的示例中,用户可以按时间或按列遍历/查询数据。从视觉上看,按时间(逐行)或按列遍历数据,时间复杂度可能不会有太大差异。 然而,实际上,数据并不是以连续的方式存储的。它更像是一个链表数据结构。通过时间查询与通过列查询之间存在巨大差异。 如下图所示,通过在查询中使用时间索引,您可以轻松地将遍历时间或查询时间缩短10倍。随着列数量的增加,效率增益甚至更大。国外某小哥亲述在其项目工作中,在处理大型表(数 GB 数据)时,他们将查询时间从 41 天缩短到大约 40 分钟,速度提高了约 100 倍。 在这种情况下,基于时间块运行的查询可能比按列运行的查询快 10 到 100 倍,因为数据库是按时间索引的。 此外,您可以要求数据分析师或数据工程师根据您的业务需求重新索引您的数据库。 -- two queries to pull large data datable 4. 利用 Python 的能力在现实项目中,完成上述步骤后,由于 SQL 的带宽或数据库服务器的计算能力瓶颈,你的 SQL 查询仍然不够快。 这个时候就可以使用 Python/Pandas 将中间表缓存到本地驱动器或云驱动器,之后用户就可以使用 Python 执行繁重的表连接或聚合步骤,这样通常会比在数据库中执行类似的步骤快得多。 下面是一个代码示例,通过 Jupyter Notebook 执行 PostgreSQL 查询并将查询结果导出为 dataframe:
5. 总结在这篇文章中,我们总结了四种加快你 SQL 查询速度的方式:
希望这篇文章对您有用,如果您有更好的技巧或建议,请与我们一同分享。 Thank you for your reading, happy querying! 该文章在 2023/11/16 20:36:36 编辑过 |
关键字查询
相关文章
正在查询... |