格式: mysql>show [session|global]status;
其中: session(默认)表示当前连接,global表示自数据库启动至今
mysql>show status;
mysql>show global status;
mysql>show status like 'Com_%';
mysql>show global status like 'Com_%';
explain select * from table where id=1000;
desc select * from table where id =1000;
mysql>create index ind_company2_name on companny2(name(4));
其中company表名ind_company2_name索引名
(1)对于创建的多列索引,只要查询的条件中用到最左边的列,索引一般就会被使用。如下创建一个复合索引。
mysql>create index ind_sales2_com_mon onsales2(company_id,moneys);
然后按company_id进行查询,发现使用到了复合索引
mysql>explain select * from sales2 where company_id=2006\G
使用下面的查询就没有使用到复合索引。
mysql>explain select * from sales2 where moneys=1\G
(1)如果MySQL估计使用索引比全表扫描更慢,则不使用索引。例如如果列key_part1均匀分布在1到100之间,查询时使用索引就不是很好
msyql>select * from table_name where key_part1>1 and key_part<90;
(2)如果使用MEMORY/HEAP表并且where条件中不使用“=”进行索引列,那么不会用到索引。Heap表只有在“=”的条件下会使用索引。
(3)用or分割开的条件,如果or前的条件中的列有索引,而后面的列中没有索引,那么涉及的索引都不会被用到。
从上面可以发现只有year列上面有索引。来看如下的执行计划。
(4)如果不是索引列的第一部分,如下例子:可见虽然在money上面建有复合索引,但是由于money不是索引的第一列,那么在查询中这个索引也不会被MySQL采用。
(5)如果like是以%开始,可见虽然在name上面建有索引,但是由于条件中like的值的“%”在第一位了,那么MySQL也会采用这个索引。
(6)如果列类型是字符串,但在查询时把一个数值型常量赋值给了一个字符型的列名name,那么虽然在name列上有索引,但是也没有用到。
ANALYZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tal_name [,tbl_name] ...
本语句用于分析和存储表的关键字分析,分析的结果将可以使得系统得到准确的统计信息,使得SQL能够生成正确的执行计划。
优化表的语法格式:
OPTIMIZE [LOCAL | NO_WRITE_TO_BINLOG] TABLE tb1_name [,tb1_name]
如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表进行了很多改动,则需要做定期优化。这个命令可以将表中的空间碎片进行合并,但是此命令只对MyISAM,BDB和InnoDB表起作用。
当用load命令导入数据的时候,适当设置可以提高导入的速度。
select name from tb1 infile into "/tmp/test.txt";
load data infile "/tmp/test.txt" into table tb1(name);
对于MyISAM存储引擎的表,可以通过以下方式快速的导入大量的数据。
ALTER TABLE tb1_name DISABLE KEYS
loading the data
ALTER TABLE tb1_name ENABLE KEYS
DISABLE KEYS 和 ENABLE KEYS 用来打开或关闭MyISAM表非唯一索引的更新,可以提高速度,
注意:对InnoDB表无效。
注意:对InnoDB表无效。
(2)关闭唯一性校验可以提高导入效率
在导入数据前先执行set unique_checks=0,关闭唯一性校验,在导入结束后执行set unique_checks=1,恢复唯一性校验,可以提高导入效率。
(1)针对InnoDB类型表数据导入的优化
因为InnoDB表的按照主键顺序保存的,所以将导入的数据主键的顺序排列,可以有效提高导入数据的效率。
(3)关闭自动提交可以提高导入效率
在导入数据前先执行set autocommit=0,关闭自动提交事务,在导入结束后执行set autocommit=1,恢复自动提交,可以提高导入效率。
在某些情况中,MySQL可以使用一个索引来满足order by子句,而不需要额外的排序。Where条件和order by使用相同的索引,并且order by的顺序和索引顺序相同,并且order by的字段都是升序或者都是降序。