标签:
a)通过SHOW STATUS;命令了解各种SQL的执行频率
SHOW [SESSION|GLOBAL] STATUS;
SESSION (默认)表示当前连接
GLOBAL 表示自数据库启动至今
SHOW GLOBAL STATUS LIKE ‘com_%‘
b)查看本次登录以来增删改查的次数
SHOW STATUS LIKE ‘com_select%‘
SHOW STATUS LIKE ‘com_update%‘
SHOW STATUS LIKE ‘com_insert%‘
SHOW STATUS LIKE ‘com_delete%‘
c)针对innodb的增删改查
SHOW STATUS LIKE ‘innodb_rows%‘
d)服务器已经工作的秒数
SHOW STATUS LIKE ‘uptime%‘
e)慢查询
查看是否开启了慢查询
SHOW VARIABLES LIKE ‘%slow%‘ (slow_query_log表示开启或关闭)
查看慢查询的时间定义
SHOW VARIABLES LIKE ‘%long%‘
查看慢查询的次数
SHOW STATUS LIKE ‘slow_queries‘
慢查询日志中会记录慢查询的SQL
分析运行慢的SQL
EXPLAIN SQL
DESC SQL
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
| 1 | SIMPLE | book | ALL | NULL | NULL | NULL | NULL | 3 | |
+----+-------------+-------+------+---------------+------+---------+------+------+-------+
select_type:查询类型
ALL:本次是简单的单表查询
PRIMARY:本次查询用到了主键
UNION:多表查询
type:
ALL:通过全表扫描得到的数据
possible_keys:可能用到的索引
key:本次用到的索引
rows:扫描的行数,这里越小查询效率越高
Extra:执行情况的说明和描述
a)MyISAM存储引擎的表数据和索引是分开的,各自是独一的一个文件。InnoDB存储引擎的数据和索引存储在同一个表空间里,但可以有多个文件组成。
可以对列的某一部分进行索引:
CREATE INDEX index_name ON table_name(column(4))
b)哪些字段适合加索引
where条件、group by条件 having条件 order by条件
c)索引会被使用的情况
对于多列索引,查询条件中用到了最左边的列,索引一般会被使用
CREATE INDEX index_name ON table_name(company_id,moneys);
WHERE company_id=123 会使用索引
WHERE moneys=22 不会使用索引
如果OR前的条件中的列有索引,后面的列没有索引,那么涉及的索引都不会被用到。只有or前后的字段都加了索引,查询才可能用到索引
如果列类型是字符串,但是把数字当作条件,索引不会被用到
handler_read_rnd_next的值越高,则意味着查询效率越低,并应该建立索引补救。SHOW STATUS LIKE ‘handler_read%‘
CHECK TABLE table_name; 分析表是否有错误,例如表被删除后,依赖他的视图将无效
OPTIMIZE TABLE table_name; 如果已经删除了表的一大部分,或者如果已经对含有可变长度行的表进行了多次改动,则需要做定期优化。这个命令可以将表中的空间碎片进行合并,对MyISAM InnoDB有效
当数据量比较大的时候,导入导出表会比较耗费系统资源,应该使用 infile和outfile
? load data 查看帮助
LOAD DATA INFILE ‘data.txt‘ INTO TABLE db2.my_table 快速导入
示例:load data infile ‘e:/sql.txt‘ into table book(bookname,publisher,author,price,ptime,pic,detail);
如果有索引的话,可以先关闭索引,在导入数据,然后打开索引 这样导入会更快DISABLE KEYS/ENABLE KEYS 关闭打开表的非唯一索引,对InnoDB无效
ALTER TABLE table_name DISABLE KEYS
导入数据
ALTER TABLE table_name ENABLE KEYS
关闭唯一索引以提高导入效率(前提是要确保数据不重复)
SET UNIQUE_CHECKS=0 关闭唯一校验
SET UNIQUE_CHECKS=1 打开唯一校验
针对innodb表可以关闭自动提交以提高导入效率(因为每导入一行都要校验是否提交)
SET AUTOCOMMIT=0 关闭自动提交
SET AUTOCOMMIT=0 打开自动提交
? outfile
SELECT * FROM table_name INTO OUTFILE ‘file_name‘ 快速导出
group by分组后默认根据分组列升序排列,如果不想排序可以使用 order by null禁止排序
尽量避免使用子查询,用连接查询来代替,因为子查询不会用到索引
标签:
原文地址:http://www.cnblogs.com/houwentoa/p/4649687.html