Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/59.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 哪个更好:在过程中调用过程还是在过程中执行sql?_Mysql_Stored Procedures_Join - Fatal编程技术网

Mysql 哪个更好:在过程中调用过程还是在过程中执行sql?

Mysql 哪个更好:在过程中调用过程还是在过程中执行sql?,mysql,stored-procedures,join,Mysql,Stored Procedures,Join,我有三张桌子: 1.学生:{id,name,roll} 2.主题:{id,name} 3.分数:{学生id,科目id,分数} 我有一个返回所有学生及其分数的过程(比如getAllMarks()),我想创建另一个返回给定卷号分数的过程(比如getRollMarks(int rollno))。因此,有两种方法可以创建该过程: 1.编写适当的SQL以在getRollMarks过程中获取结果。 2.在getRollMarks中调用getAllMarks,然后对getAllMarks返回的结果应用wher

我有三张桌子:
1.学生:{id,name,roll}
2.主题:{id,name}
3.分数:{学生id,科目id,分数}

我有一个返回所有学生及其分数的过程(比如getAllMarks()),我想创建另一个返回给定卷号分数的过程(比如getRollMarks(int rollno))。因此,有两种方法可以创建该过程:
1.编写适当的SQL以在getRollMarks过程中获取结果。
2.在getRollMarks中调用getAllMarks,然后对getAllMarks返回的结果应用where子句

有人能提出以上两种方法的利弊吗?我对方法2有两个优点:
1.SQL查询不会跨过程重复。
2.如果一个表中有任何变化,则该变化将在一个地方/程序中进行,而不是在使用该表的每个程序中进行。


PS:这些表只是一个例子,实际上它们是更大的表,需要查询很多参数。这个问题可以简化为:我们应该在不同的过程中编写重复查询,还是应该将现有过程与required子句(where、order by、joins等)一起使用?如果不想重复查询,应该使用视图。从性能角度看,它更快。

首先,我从未说过我不想这样做,我想要更好的解决方案。第二,我举了一个表为例,可以有10多个表,其中包含10^6行数据和以上两个过程。因此,我想为所有视图创建视图并不好。好吧,我想,我没有理解,但我认为,由于易于维护,减少重复是一个专业。在性能方面,调用嵌套存储过程和单独调用存储过程之间也没有太大区别。感谢链接,链接中的示例似乎不足以比较两者的性能,在我的例子中,有两个以上的表有超过10万行。我认为在第二种情况下,会有很大的性能开销。您认为视图或临时表有任何帮助吗?您的存储过程所做的完全不同,但链接显示嵌套存储过程的开销最小。至于第二个问题,如果操作得当,只有索引视图才能比存储过程快。就我个人而言,如果不涉及条件逻辑,我将使用视图