show processlist;查看当前mysql在进行的线程,包括线程的状态,是否锁表,可以实时的查看sql的执行情况,同时对一些锁表的操作进行优化。
查询表是否带索引:show index from table(表名)
explain查看使用索引的情况:
复合索引全值匹配最快,遵循最左前缀法则,在范围查询的情况下,范围查询的
右边是不走索引的,字段运算(如截取匹配)也是不走索引的,数字不加单引号不走索引,因为使用数字后,数据库底层会进行隐式数据转换对字段进行运算。
select查询的数据如果不在索引中会进行回表查询,使用or的情况下索引都会失效
使用like进行模糊匹配,%在前面不走索引,%在后面索引生效,但是可以通过覆盖索引解决这个问题,即select查询的内容为索引列
对于is null 和is not null mysql数据库底层根据数据的比例判断是否走索引还是全表扫描快,如果null少的话,is null 就做索引。in走索引而not in 不走索引
查看索引的使用情况:
show status like ‘Handler_read%’;
show global status like ‘Handler_read%’;
load批量导入数据。最好保持有序:
load data local infile ‘/root/sql1.log’ into table ‘tb_user’ fileds terminated by ‘,’,lines terminated by ‘\n’;
关闭唯一性校验:
set unique_checks=0;
查询sql执行时间及执行花费时间的地方
select @@have_profiling;
select @@profiling;
set profiling=1;
show profile for query 5(这个是query_id);
set optimizer_trace="enabled=on”,end_markers_in_json=on;
set optimizer_trace_max_mem_size=100000;
select * from information_schema.optimizer_trace\G;