索引设计使用原则
为了提升数据检索速度,降低查询延时和IO消耗,在建表或者编写SQL语句时,应该首先设计及检查索引和数据分布情况,下面是常见的索引设计或使用原则:
尽量选择惟一性索引;
为经常需要排序、分组和联合操作的字段建立索引;
为常作为查询条件的字段建立索引;
限制索引的数目,索引越多,更新和插入的效率越低;
尽量使用数据量少的索引;
组合索引中的尽量把能过滤掉更多数据的字段放在前面;
尽量使用前缀来索引,针对长文本,TEXT等类型;
删除不再使用或者很少使用的索引;
数据是动态变化中的,索引的使用也需要根据数据的变化而变化。
show processlist 命令
输入show processlist命令后可以看到数据库中所有连接中的session,以及相应SQL的执行情况,如下图所示:
其中:
id是session id,可以使用kill xxxx 的方式来杀死session;
user,host,db是session操作的用户,主机和数据库;
command是命令类型;
info是详细的SQL语句;
time是相应命令执行时间;
state是命令执行状态。
这里面最重要的是time和state,大部分状态对应很快的操作,只要有一个线程保持同一个状态好几秒钟,那么可能是有问题发生了,需要检查一下。
而根据state可以判断执行慢的问题在哪里,相应state含义对照表见下表。
Explain 命令
在所执行的SQL前加explain命令,即可查看相应SQL的执行计划,例如一个很简单的like查询,是否使用了索引,可以通过possible_keys和rows很容易能看出来。
对于一个复杂的SQL来说,往往explain会有多行数据,相关列字段见:https://www.cnblogs.com/xiaoboluo768/p/5400990.html
索引设计及使用规范
建表时,就要根据规划中不同表的用途和查询方式建立合适的索引;
编写SQL时,要清楚的知道表都有哪些索引,如何才能最大化的利用索引查询,降低查询速度,尤其是数据量超大(超过100万条),或者需要进行多表关联时,本条规则就尤其重要;
SQL编写后,要养成使用explain命令查看索引使用情况的习惯,避免一些本应该使用索引的SQL并没有使用索引,或者因为数据问题,使用索引可能还没有不用来的快;
定时查看数据库执行情况,使用show processlist或者开启慢查询,查看慢查询日志,分析执行效率低的SQL;
当发生数据查询慢,或者数据库IO开销很高的情况,要学会使用show processlist或show full processlist命令查看数据库当前在做什么,哪些SQL执行慢,问题出现在哪里,等等。