mysql - 如何禁用从 MYSQL Workbench 上的 EXECUTE STATEMENT 返回的结果集
问题描述
我正在使用 MySQL 5.6 版本的 InnoDB,并且我创建了一个存储过程来对我的模式中的所有对象运行 ANALYZE TABLE。所以我使用 CURSOR 和每一个 FETCH 执行一个循环,我运行一个 PREPARE STATEMENT EXECUTE,如下所示:
...
OPEN CURSOR_TABLE_LIST;
LOOP_TABLE_LIST: LOOP
FETCH CURSOR_TABLE_LIST INTO vTableName;
SET @full_stmt = CONCAT('ANALYZE TABLE mySchema.', vTableName);
PREPARE stmt FROM @full_stmt;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
IF vExitLoop THEN
CLOSE CURSOR_TABLE_LIST;
LEAVE LOOP_TABLE_LIST;
END IF;
END LOOP LOOP_TABLE_LIST;
...
问题是:执行 ANALYZE 过程的每个准备语句都返回一个包含 4 列的结果集,而我正在使用 MySQL Workbench。因此,如果在我的模式中存在太多表,我的 Workbench 将冻结并停止运行。
我怎样才能静默、禁用、省略或禁止执行语句返回?我知道对于简单的 SELECT 语句,我可以使用它:
SET @foo = (SELECT COL FROM TAB);
但是我可以对 PREPARE STATEMENT 结构做类似的事情吗?我尝试过的另一种可能的解决方案是在另一个“通用过程”中编写准备语句块的编程,但我也没有找到一种方法来使 CALL PROCEDURE 的返回静默......
CALL SP_EXECUTE_IMMEDIATE('ANALYZE TABLE mySchema.myTable');
我是使用 MySQL 的新手......也许我可以把这个返回放在一个表中?它与 PLSQL 或 T-SQL 完全不同......有什么想法吗?非常感谢![]的
解决方案
分析表可选地允许您分析多个表
ANALYZE [NO_WRITE_TO_BINLOG | LOCAL]
TABLE tbl_name [, tbl_name]
https://dev.mysql.com/doc/refman/5.6/en/analyze-table.html
也许这比你刚才的一次一次的方法更合适。
推荐阅读
- ios - SwiftUI 通过调用函数在 ScrollView 上填充数据
- autohotkey - 在 Autohotkey 中如何等到屏幕打开?
- python - 如何在 python 中使用 SQLalchemy 在数据库中有新条目时运行脚本?
- reactjs - React 和 Redux 工具包 - 承诺后拒绝
- python-3.x - 当父标签仅对某些元素有子标签时抓取数据
- c++ - 如何在共享模型的多个 Qt Widget 之间进行通信
- javascript - 仅来自“sub.domain.com” JS 的正则表达式“域”
- android-studio - Kotlin 表达式给出不同的结果(运行时与 IDE 评估表达式)
- docker - 无法在 wso2 docker 映像中执行目标 org.wso2.maven:mi-container-config-mapper:5.2.18:config-mapper-parser
- cmake - 一次构建多个项目