提高mysql存储函数的性能

时间:2015-02-12 20:37:59

标签: mysql performance

我有一个从SQL Server移植的存储函数,对于MySql来说速度非常慢。由于我的应用程序需要同时支持SQL Server和MySql(通过ODBC驱动程序),我需要这个功能。存储的功能通常用于"其中"条款,但即使仅在" select"子句。

是否有提高功能性能的技巧?也许任何有用的工具指出潜在的存储功能问题或慢点?

它们是复杂的功能。因此,虽然函数中的一个语句相对较快,但所有内容都很慢。

此外,在这些功能中使用视图。不知道这对事情有多大影响。观点本身似乎在合理的时间内运行。

我知道我没有提供太多细节,但我更多的是寻找性能工具或一些高级存储功能性能提示。

我确实在网上看到各种帖子建议人们不要在"其中"条款,但我有点卡住,因为我想在SQL Server和MySql之间来回使用相同的可执行文件,并且函数是复杂的,直接嵌入到我的应用程序中的SQL中。

根据Gruber的回答编辑,用一个例子来澄清事情: 以下是一个示例查询:

SELECT count(*) FROM inv USE INDEX(inv_invsku) WHERE invsku >= 'PBM116-01' AND WHMSLayer_IS_LOC_ACCESSIBLE( '', 'PFCSYS    ', invloc ) > 0 ORDER BY invsku;

如果我摆脱了对IS_LOC_ACCESSIBLE的调用,它会快得多。 IS_LOC_ACCESSIBLE只是3个这样的函数之一。它有一堆IF语句,其他表和视图的查询等。这就是为什么我称之为"复杂",因为所有额外的逻辑和条件路径。

1 个答案:

答案 0 :(得分:0)

您可以尝试使用查询分析器,例如dbForge Studio中包含的查询分析器,并尝试确切了解瓶颈是什么。

也许您的表格没有正确编入索引?

通过在查询中移动,创建相同的输出但更改内部执行路径,有时可以在MySQL(和SQL Server)中实现良好的改进。例如,尝试删除复杂的WHERE子句,使用复杂的代码作为包装的SELECT语句的输出,您可以随后使用WHERE。