优化Mysql查询(rawdata到已处理表)

优化Mysql查询(rawdata到已处理表),mysql,database,Mysql,Database,大家好,我的问题是,我有一个文件,可以通过本地infle命令读取大约3000行数据。之后,在插入的表上有一个触发器,它从更新的表中复制三列,从数据库中已经存在的表中复制两列(如果我不清楚结构是什么意思的话)。从那里,只有具有唯一GLNUMBER的组合才会输入到处理过的表中。这通常需要一分半钟。我发现这很长,我想知道这对于我正在做的事情来说是正常的(不敢相信这是真的),还是有一种方法可以优化查询,使其更快 插入到的表格标记为每个月的前三个字母。这里是默认结构 原始数据结构 | idjan | gl

大家好,我的问题是,我有一个文件,可以通过本地infle命令读取大约3000行数据。之后,在插入的表上有一个触发器,它从更新的表中复制三列,从数据库中已经存在的表中复制两列(如果我不清楚结构是什么意思的话)。从那里,只有具有唯一GLNUMBER的组合才会输入到处理过的表中。这通常需要一分半钟。我发现这很长,我想知道这对于我正在做的事情来说是正常的(不敢相信这是真的),还是有一种方法可以优化查询,使其更快

插入到的表格标记为每个月的前三个字母。这里是默认结构

原始数据结构

| idjan | glNumber  | journel  | invoiceNumber  | date  | JT  | debit  | credit | descriptionDetail  | totalDebit  | totalCredit |
(抱歉)对于糟糕的格式,似乎没有一个真正好的方法可以做到这一点)

插入触发器查询后

delete from processedjan;
insert into processedjan(glNumber,debit,credit,bucket1,bucket2)
select  a.glNumber, a.totalDebit, a.totalCredit, b.bucket1, b.bucket2
from jan a inner join bucketinformation b on a.glNumber = b.glNumber
group by glNumber;
已处理的数据表结构

| idjan | glNumber  | journel  | invoiceNumber  | date  | JT  | debit  | credit | descriptionDetail  | totalDebit  | totalCredit |
|glNumber | BACKET1 | BACKET2 |贷方|借方|

另外,我想知道bucket 1和bucket 2来自另一个表,它与glNumber匹配,这会有所帮助。该表大约有800行,其中包含三列glNumber和两个bucket

虽然mysql有语句级触发器,但它只有行级触发器。从:

触发器定义为在语句插入、更新或删除时激活 删除关联表中的行。这些行操作是触发器 事件。例如,可以通过插入或加载数据来插入行 语句,并为每个插入行激活一个插入触发器

因此,当您试图在一个操作中加载3000行时,不幸的是触发器执行了3000多个查询。但是事务的复杂性听起来像是每行执行2-3个查询。这才是减速的真正原因

通过禁用触发器并执行插入,可以加快速度。。在文件中加载数据后选择。您可以用一个小脚本来自动执行它。

虽然mysql有语句级触发器,但它只有行级触发器。从:

触发器定义为在语句插入、更新或删除时激活 删除关联表中的行。这些行操作是触发器 事件。例如,可以通过插入或加载数据来插入行 语句,并为每个插入行激活一个插入触发器

因此,当您试图在一个操作中加载3000行时,不幸的是触发器执行了3000多个查询。但是事务的复杂性听起来像是每行执行2-3个查询。这才是减速的真正原因


通过禁用触发器并执行插入,可以加快速度。。在文件中加载数据后选择。你可以用一个小脚本自动完成。

哦,我明白了。我不知道。午饭后我会检查一下,然后告诉你。你是对的。很抱歉,我花了这么长时间才回复,我想我疯了,在我的应用程序中删除了一些东西,它让我破产了,所以我不得不修复它。谢谢你的帮助。我希望MySQL文档能更好一点。哦,我明白了。我不知道。午饭后我会检查一下,然后告诉你。你是对的。很抱歉,我花了这么长时间才回复,我想我疯了,在我的应用程序中删除了一些东西,它让我破产了,所以我不得不修复它。谢谢你的帮助。我希望MySQL文档更好一点。