转移程序执行上下文

时间:2014-05-26 13:52:08

标签: mysql sql stored-procedures

我在MySQL中运行一个非常简单的proc,与此类似:

insert into link_table ( primary_key_1, primary_key_2 )

select 
    table1.primary_key, 
    table2.primary_key

from
    table1
    inner join table_ref on table_ref.field_name1 = table1.field_name
    inner join table2    on table2.field_name = table_ref.field_name2

这个字符串比较连接比我预期的要长,每个插入大约1.5秒,在大约8000行中运行。

据我了解,每个过程/查询都在用户的上下文中执行。这意味着如果用户失去连接或电源,那么查询将失去上下文,因此事务失败。

有没有办法将程序的执行上下文转移到"系统"用户或类似的东西?这样我就可以去喝咖啡看电影等等。

1 个答案:

答案 0 :(得分:0)

关于" context"的问题更适合dba.stackexchange.com。但是,您可以使查询更有效。这是查询:

insert into link_table( primary_key_1, primary_key_2 )
select table1.primary_key, table2.primary_key
from table1 inner join
     table_ref
     on table_ref.field_name1 = table1.field_name inner join
     table2
     on table2.field_name = table_ref.field_name2;

您应该能够使用以下索引加快此查询:

table_ref(field_name1, field_name2)
table2(field_name, primary_key)

提高性能可能会解决您的问题。