哪种方法更适合提高存储过程的性能

Posted

技术标签:

【中文标题】哪种方法更适合提高存储过程的性能【英文标题】:which approach is better for increasing performance of a stored procedure 【发布时间】:2015-01-16 11:48:26 【问题描述】:

我有一个 sp,它必须从 8 个表中选择数据,每个选择查询都有很多“where 子句”,每个表都有数千行数据。

现在,要求是提高这个 sp 的性能。 建议了以下提到的方法,下面分别提到了我对它们的问题:

    创建一些其他表来存储经常询问的数据(例如:对于当年),因此将这些表用于询问 50% 的时间的当年数据。并使用当年以外的年份的原始表格。由于这会限制数据,因此我们预计性能会有所提高。 所以我的问题是:这会显着提高性能吗?因为无论如何 where 子句也限制了要选择的数据。或者减少提供给 sql 的数据与性能有何关系 根据年份在现有表上创建分区。 我不知道这些分区是如何工作的。因此,如果有人能对此有所了解,将不胜感激。

【问题讨论】:

mysql 和 sql server 是不同的野兽,编辑你的标签。 你需要在图中引入ETL和日常作业来调度它们。 @Sourav_Agasti :感谢您的意见,但这是我仅使用此 sp 和现有数据库的限制。我不能仅仅为了这个需求而引入 ETL 确保表格被正确索引(检查desc)。这将产生巨大的影响。还要看看是否可以缓存任何东西。 【参考方案1】:

选项 1 基本上没有用,因为您必须编写大量代码来决定使用哪些表。

选项 2:与从 INDEX 获得的性能相比,PARTITIONing 很少能提高性能。

所以,选项 3:让我们看一个典型的查询和 SHOW CREATE TABLEs。那我们看看能不能优化查询。可能就像将日期时间放在一些现有索引的末尾一样简单。

【讨论】:

以上是关于哪种方法更适合提高存储过程的性能的主要内容,如果未能解决你的问题,请参考以下文章

MySQL存储过程

MySQL_基础_存储过程和函数

哪种 DATATYPE 更适合使用 TEXT 或 VARCHAR?

存储过程

达梦数据库的存储过程

存储过程详解