使用MyISAM优化所有MySQL表
我在这里找到了很棒的文章 但当我尝试时:使用MyISAM优化所有MySQL表,mysql,myisam,Mysql,Myisam,我在这里找到了很棒的文章 但当我尝试时: 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 你能给我举个例子
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
非常感谢您的时间。您可以通过使用参数指定用于
mysql
命令的数据库。尽管有那篇文章中的陈述,您可能不需要经常运行optimize 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
test.m
`test`.`m`
(我必须创建一个名为MyISAM的表m
,因为我通常不使用MyISAM,我建议这样做。)
如果要跳过列标题,请使用-N
或--跳过列名
选项
for i in `mysql -N -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
test.m
`test`.`m`
您可能还希望对模式和表名进行分隔,因为这两个名称都可能是保留字
for i in `mysql -N -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
test.m
`test`.`m`