mysql索引优化和TCP协议

1、当使用索引列进行查询的时候尽量不要使用表达式,把计算放再业务层而不是数据库层。

2、尽量使用主键查询,而不是其他索引,因此主键查询不会触发回表查询。

3、使用前缀索引。

4、使用索引扫描来排序。

5、union all,in,or 都能使用索引,但是推荐使用in。

6、范围列可以用到索引。

6.1、范围条件是:<、<=、>、>=、between

6.2、范围列可以用到索引,但是范围后面的列无法用到索引,索引最多用于一个范围列

7、强制类型转换会全表扫描

8、更新十分频繁,数据区分度不高的字段不宜建立索引

8.1、更新会变更B+树,更新频繁的字段建议索引会大大降低数据库性能

8.2、类似于性别这类区分不大的属性,建立索引是没有意义的,不能有效的过滤数据

8.3、一般区分度在80%以上的时候就可以建立索引,区分度可以使用count(distinct(列名))/count(*)来计算

9、创建索引的列,不允许为null,可能会得到不符合预期的结果

10、当需要进行表连接的时候,最好不要超过三张表,因为需要join的字段,数据类型必须一致

11、能使用limit的时候尽量使用limit,大数据量不推荐,建议改为子查询或union all

12、单表索引建议控制在5个以内(现在没有太多的限制)

13、单索引字段不允许超过5个(组合索引)

14、创建索引的时候应该避免一下错误概念

14.1、索引越多越好

14.2、过早优化,在不了解系统的情况下进行优化

 

【索引监控】

show status like 'Handler_read%';

参数解释:

a、Handler_read_first:读取索引第一个条目的次数

b、Handler_read_key:通过索引获取数据的次数

c、Handler_read_last:读取索引最后一个条目的次数

d、Handler_read_next:通过索引读取下一条数据的次数

e、Handler_read_prev:通过索引读取上一条数据的次数

f、Handler_read_rnd:从固定位置读取数据的次数

g、Handler_read_rnd_next:从数据节点读取下一条数据的次数

 

【性能监控】

5.7后废弃deprecated

查询后整体显示:show profiles;

查询后分步显示:show profile all for query 1;

开启:set profiling=1;

执行计划:explain

推荐performance schema

show processlist

show variables

【schema与数据类型优化】(高性能mysql)

用整形存储ip地址:select inet_aton('192.168.1.1')

null!=null

mysql索引优化和TCP协议_第1张图片

 

TCP/IP协议:

应用层

exec 8<> /dev/tcp/www.baidu.com/80

echo -e "GET / HTTP/1.0\n" >& 8

cat <& 8

传输层

netstat -anop

数据链路层

arp -a

 

tcpdump --n -i eth0 arp pr port 80

 

你可能感兴趣的:(mysql索引优化和TCP协议)