【发布时间】:2021-09-19 17:23:47
【问题描述】:
我的 API 正在调用两个 sql 语句,返回两个不同的输出
mycursor.execute("SELECT a,b,c,d,e,f,g,h,i,j,k \\
from table_1 \\
left join table_2 \\
left join table_3 \\
left join table_4 \\
left join table_5 \\
")
myresult = mycursor.fetchall()
mycursor.execute("SELECT r,s,t,u,v,w,x,y,z \\
from table_6 \\
left join table_8 \\
left join table_9\\
left join table_10\\
left join table_11 \\
")
myresult = mycursor.fetchall()
两个选择查询都花费了很多时间来执行
所以,我打算将这两个查询转换为两个不同的存储过程
DROP PROCEDURE IF EXISTS statement_1;
DELIMITER //
CREATE PROCEDURE statement_1
BEGIN
SELECT a,b,c,d,e,f,g,h,i,j,k
from table_1
left join table_2
left join table_3
left join table_4
left join table_5
END //
DELIMITER ;
DROP PROCEDURE IF EXISTS statement_2;
DELIMITER //
CREATE PROCEDURE statement_2
BEGIN
SELECT r,s,t,u,v,w,x,y,z
from table_6
left join table_8
left join table_9
left join table_10
left join table_11
END //
DELIMITER ;
打电话给他们
myresult.callproc('statement_1')
myresult.callproc('statement_2')
这种方法会更快,还是我需要使用UNION ALL 将这两个语句组合成一个存储过程?
这是否可能,假设这两个语句返回完全不同且不相关的输出。
【问题讨论】:
-
您可能只需要
join键上的索引。或者您的数据可能很大,任何查询都需要很长时间才能返回您想要的结果。 -
将查询移动到存储过程将无济于事。使用联合无济于事。我建议您提出一个新问题以帮助优化您的查询,显示所有表的
show create table yourtablename和explain select ...rest of your query的输出(作为文本,而不是图像)
标签: python mysql stored-functions