Php MySQL过程性能问题,因为名称\u CONST

Php MySQL过程性能问题,因为名称\u CONST,php,mysql,performance,cursor,Php,Mysql,Performance,Cursor,我在两个版本的MySQL上对相同的数据执行以下过程,我发现性能有很大的不同。 当我运行“显示完整进程列表”时。 我看到的唯一区别是MySQL版本5.5.15生成NAME_CONST,并对每个选择进行整理,如下所示。 两个DBs上的字符集都是拉丁文1 声明过程示例() 开始 声明一个值int; 宣布B_Val varchar(50) 结束 MySQL版本=5.5.15 对于每个select,MySQL都会生成一个名称\u CONST和COLLATE,如下所示 选择名称_CONST('B_Val',

我在两个版本的MySQL上对相同的数据执行以下过程,我发现性能有很大的不同。 当我运行“显示完整进程列表”时。 我看到的唯一区别是MySQL版本5.5.15生成NAME_CONST,并对每个选择进行整理,如下所示。 两个DBs上的字符集都是拉丁文1

声明过程示例() 开始 声明一个值int; 宣布B_Val varchar(50)

结束

MySQL版本=5.5.15 对于每个select,MySQL都会生成一个名称\u CONST和COLLATE,如下所示

选择名称_CONST('B_Val','u latin1'A12345'对比'latin1\u瑞典语')、X_Val 来自SomeTableX

MySQL版本=5.7.16 生成相同的SQL时,不需要out NAME_CONST,而且比较和执行的速度要快得多

从SomeTableX中选择B_Val、X_Val

有人可以建议如何禁用名称常量和校对生成。
有没有办法告诉MySQL停止生成这些额外的名称常量并进行整理??

所以
在两台服务器上都显示创建过程。您可能会看到,它们是使用不同的
字符集和/或
排序规则构建的,这是一个猜测,为什么一个MySQL版本可能比另一个版本更快:在过去5年中,有一些技术改进。你的代码应该怎么做?您当前的过程没有多大意义,或者只是为了有一个测试用例?您可能希望执行相同的测试,但从表中选择2列而不是变量(例如,
选择x_val,从sometablex
选择x_val),并检查是否仍然较慢。这是非常有用的信息。但是有没有办法设置过程的字符集和排序规则?为您的连接设置它们,
放下SP,重新创建它,然后通过
显示创建…
DECLARE ApplCursor CURSOR FOR
    SELECT A, CONVERT(B, CHAR(50))
    FROM SampleTable;


OPEN ApplCursor;

Cursor_Loop: LOOP
    FETCH ApplCursor INTO A_Val, B_Val;

    SELECT B_Val, X_Val FROM SomeTableX;

END LOOP Cursor_Loop;

CLOSE ApplCursor;