返回顶部
首页 > 资讯 > 精选 >怎么用2个Unix命令给SQL提速
  • 387
分享到

怎么用2个Unix命令给SQL提速

2023-06-16 10:06:52 387人浏览 八月长安
摘要

这篇文章给大家分享的是有关怎么用2个Unix命令给sql提速的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性能简直糟糕透了。如何将查询时间从 38

这篇文章给大家分享的是有关怎么用2个Unix命令给sql提速的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性能简直糟糕透了。如何将查询时间从 380  小时降到 12 小时以下的。

下面就是这个查询,它是 GHTorrent 分析的一部分,我使用了关系在线分析处理框架 simple-rolap 来实现这个分析。

select distinct  project_commits.project_id,  date_fORMat(created_at, ‘%x%v1’) as week_commit  from project_commits  left join commits  on project_commits.commit_id = commits.id;

两个连接字段都有索引。不过,MariaDB 是通过对 project_commits 进行全表扫描和对 commits 进行索引查找来实现连接的。这可以从  EXPLaiN 的输出看出来。

怎么用2个Unix命令给SQL提速

这两个表中的记录比较多:project_commits 有 50 亿行记录,commits 有 8.47 亿行记录。服务器的内存比较小,只有  16GB。所以很可能是因为内存放不下那么大的索引,需要读取磁盘,因此严重影响到了性能。从 pmonitor  对临时表的分析结果来看,这个查询已经运行半天了,还需要 373 个小时才能运行完。

/home/Mysql/ghtorrent/project_commits#P#p0.MYD 6.68% ETA 373:38:11

在我看来,这个太过分了,因为排序合并连接(sort-merge join)所需的 I/O 时间应该要比预计的执行时间要低一个数量级。我在  dba.stackexchange.com  上寻求帮助,有人给出了一些建议让我尝试,但我没有信心它们能够解决我的问题。我尝试了***个建议,结果并不乐观。尝试每个建议都需要至少半天的时间,后来,我决定采用一种我认为可以有效解决这个问题的办法。

我将这两个表导出到文件中,使用 Unix 的 join 命令将它们连接在一起,将结果传给  uniq,把重复的行移除掉,然后将结果导回到数据库。导入过程(包括重建索引)从 20:41 开始,到第二天的 9:53 结束。以下是具体操作步骤。

1. 将数据库表导出为文本文件

我先导出连接两个表需要用到的字段,并按照连接字段进行排序。为了确保排序顺序与 Unix 工具的排序顺序兼容,我将字段转换为字符类型。

我将以下 SQL 查询的输出保存到文件 commits_week.txt 中。

select cast(id as char) as cid,  date_format(created_at, ‘%x%v1’) as week_commit  from commits  order by cid;

然后将以下 SQL 查询的输出保存到 project_commits.txt 文件中:

select cast(commit_id as char) as cid, project_id  from project_commits  order by cid;

这样就生成了以下两个文件。

-rw-r–r– 1 dds dds 15G Aug 4 21:09 commits_week.txt  -rw-r–r– 1 dds dds 93G Aug 5 00:36 project_commits.txt

为了避免内存不足,我使用 –quick 选项来运行 mysql 客户端,否则客户端会在输出结果之前尝试收集所有的记录。

2. 使用 Unix 命令行工具处理文件

接下来,我使用 Unix 的 join  命令来连接这两个文本文件。这个命令线性扫描两个文件,并将***个字段相同的记录组合在一起。由于文件中的记录已经排好序,因此整个过程完成得很快,几乎就是 I/O  的速度。我还将连接的结果传给 uniq,用以消除重复记录,这就解决了原始查询中的 distinct  问题。同样,在已经排好序的输出结果上,可以通过简单的线性扫描完成去重。

这是我运行的 Unix 命令。

join commits_week.txt project_commits.txt | uniq >joined_commits.txt

经过一个小时的处理,我得到了想要的结果。

-rw-r–r– 1 dds dds 133G Aug 5 01:40 joined_commits.txt

3. 将文本文件导回数据库

***,我将文本文件导回数据库

create table half_life.week_commits_all (project_id INT(11) not null,week_commit CHAR(7)) ENGINE=MyISAM;load data local infile ‘joined_commits.txt’into table half_life.week_commits_allfields terminated by ‘ ‘;

感谢各位的阅读!关于“怎么用2个Unix命令给SQL提速”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

--结束END--

本文标题: 怎么用2个Unix命令给SQL提速

本文链接: https://lsjlt.com/news/283268.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么用2个Unix命令给SQL提速
    这篇文章给大家分享的是有关怎么用2个Unix命令给SQL提速的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。我试图在 MariaDB(MySQL)上运行一个简单的连接查询,但性能简直糟糕透了。如何将查询时间从 38...
    99+
    2023-06-16
  • Unix中awk命令怎么用
    小编给大家分享一下Unix中awk命令怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!awk 命令不仅提供了简单的输入字符串筛选功能,还包含提取数据列、打印简...
    99+
    2023-06-16
  • 怎么快速实现命令行提示
    本篇内容介绍了“怎么快速实现命令行提示”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一  命令行...
    99+
    2024-04-02
  • unix系统中怎么用终端命令提高工作效率
    本篇内容主要讲解“unix系统中怎么用终端命令提高工作效率”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“unix系统中怎么用终端命令提高工作效率”吧!在终端中反...
    99+
    2024-04-02
  • Unix系统中怎么使用chmod命令
    这篇文章主要介绍了Unix系统中怎么使用chmod命令的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Unix系统中怎么使用chmod命令文章都会有所收获,下面我们一起来看看吧。使用数字改变权限chmod使用数字...
    99+
    2023-07-04
  • SQL中SQLLDR 命令怎么用
    这篇文章将为大家详细讲解有关SQL中SQLLDR 命令怎么用,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。 SQL*Loader 是一个命令行下的操作工具,对应的操作系...
    99+
    2024-04-02
  • C#中SQL命令怎么用
    这篇文章主要介绍了C#中SQL命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。C#语言有很多值得学习的地方,这里我们主要介绍C# SQL命令,包括介绍DELET...
    99+
    2023-06-17
  • SQL命令DELETE怎么使用
    DELETE命令用于从数据库表中删除记录。它的语法如下: DELETE FROM 表名 WHERE 条件; 其中,"...
    99+
    2023-10-23
    SQL
  • SQL中EXPLAIN命令怎么用
    这篇文章主要介绍了SQL中EXPLAIN命令怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。explain显示了mysql如何使用索引来处理select语句以及...
    99+
    2023-06-08
  • SQL的update命令怎么使用
    SQL的UPDATE命令用于更新表中的数据。其基本语法如下:```UPDATE 表名SET 列名1 = 新值1, 列名2 = 新值2...
    99+
    2023-10-10
    SQL
  • SQL命令CREATE TRIGGER怎么使用
    CREATE TRIGGER是用来创建触发器的SQL命令。触发器是一种特殊的数据库对象,它可以在特定的数据库事件发生时自动执行一系列...
    99+
    2023-10-20
    SQL
  • Unix/Linux提权漏洞快速检测工具unix-privesc-check怎么用
    小编给大家分享一下Unix/Linux提权漏洞快速检测工具unix-privesc-check怎么用,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Unix/Linux提权漏洞快速检测工具unix-privesc-check...
    99+
    2023-06-04
  • 怎么利用for命令提权
    小编给大家分享一下怎么利用for命令提权,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!代码如下:for /r d:\wwwroot\web\chouwazi.co...
    99+
    2023-06-08
  • Linux/Unix中怎么安装和使用z命令
    这篇文章主要介绍了Linux/Unix中怎么安装和使用z命令的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Linux/Unix中怎么安装和使用z命令文章都会有所收获,下面我们一起来看看吧。简介z 是一个开源的 ...
    99+
    2023-06-27
  • 服务器测速命令怎么用
    服务器测速命令可以使用以下几种方式:1、使用ping命令在命令行输入“ping IP地址”或“ping 域名”,例如“ping ww...
    99+
    2023-03-20
    服务器测速命令 服务器
  • LINQ to SQL查询和SQL命令怎么使用
    这篇文章主要讲解了“LINQ to SQL查询和SQL命令怎么使用”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“LINQ to SQL查询和SQL命令怎么使用”吧!直接执行LINQ to S...
    99+
    2023-06-17
  • chmod命令怎么在Linux与Unix系统中使用
    chmod命令怎么在Linux与Unix系统中使用?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。使用ls -l命令后,我们可以看到文件前面都有一串类似-rwxrwxrwx的...
    99+
    2023-06-12
  • linux快速跳转命令z怎么用
    小编给大家分享一下linux快速跳转命令z怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!快速跳转命令 - z要是每次都要进入一个目录很深的文件夹下,像下面这...
    99+
    2023-06-27
  • oracle怎么用命令执行sql文件
    使用命令执行 sql 文件的命令为 sqlplus -s username/password @filename.sql,其中 username 为用户名,password 为密码,fi...
    99+
    2024-05-13
    oracle 敏感数据
  • sql怎么用命令创建数据库
    在 sql 中使用 create database 命令创建新数据库,其语法包含以下步骤:指定数据库名称。指定数据库文件和日志文件的位置(可选)。指定数据库大小、最大大小和文件增长(可选...
    99+
    2024-05-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作