使用 MyISAM 优化所有 MySQL 个表
Optimize all MySQL tables using MyISAM
我在这里找到了很棒的文章http://www.empulsegroup.com/?p=342
但是当我尝试时:
root@vps:~# for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; do mysql -e "optimize table $i"; done
ERROR 1046 (3D000) at line 1: No database selected
- 你能给我一些使用它的例子吗?
- 如何优化 --all-databases?
非常感谢您的宝贵时间。
您使用 -D
or --database=...
参数指定要用于 mysql
命令的数据库。
尽管那篇文章中有声明,您可能不需要经常运行 优化table。它确实不会使查询 运行 快得多。
但让我们谈谈您遇到的错误以及如何修复它。
查询的第一行输出不是 table 名称,而是列标题,在本例中是您使用的表达式。
for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`;
do
echo "$i";
done
输出:
concat(table_schema,".",table_name)
test.m
(我必须创建一个 table m
是 MyISAM,因为我通常不使用 MyISAM,我建议 you should not use MyISAM either。)
如果您想跳过列标题,请使用 -N
或 --skip-column-names
选项。
for i in `mysql -N -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`;
do
echo "$i";
done
输出:
test.m
您可能还想分隔模式和 table 名称,因为这两个名称都可能是保留字。
for i in `mysql -N -e 'select concat("\`",table_schema,"\`.\`",table_name,"\`") from information_schema.tables where engine="MyISAM"'`;
do
echo "$i";
done
输出:
`test`.`m`
我在这里找到了很棒的文章http://www.empulsegroup.com/?p=342
但是当我尝试时:
root@vps:~# for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`; do mysql -e "optimize table $i"; done
ERROR 1046 (3D000) at line 1: No database selected
- 你能给我一些使用它的例子吗?
- 如何优化 --all-databases?
非常感谢您的宝贵时间。
您使用 -D
or --database=...
参数指定要用于 mysql
命令的数据库。
尽管那篇文章中有声明,您可能不需要经常运行 优化table。它确实不会使查询 运行 快得多。
但让我们谈谈您遇到的错误以及如何修复它。
查询的第一行输出不是 table 名称,而是列标题,在本例中是您使用的表达式。
for i in `mysql -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`;
do
echo "$i";
done
输出:
concat(table_schema,".",table_name)
test.m
(我必须创建一个 table m
是 MyISAM,因为我通常不使用 MyISAM,我建议 you should not use MyISAM either。)
如果您想跳过列标题,请使用 -N
或 --skip-column-names
选项。
for i in `mysql -N -e 'select concat(table_schema,".",table_name) from information_schema.tables where engine="MyISAM"'`;
do
echo "$i";
done
输出:
test.m
您可能还想分隔模式和 table 名称,因为这两个名称都可能是保留字。
for i in `mysql -N -e 'select concat("\`",table_schema,"\`.\`",table_name,"\`") from information_schema.tables where engine="MyISAM"'`;
do
echo "$i";
done
输出:
`test`.`m`