查询优化
1.分解关联查询
优势:
1.让缓存的效率更高,如果关联的表变化,则无法使用查询缓存
2.减少锁竞争
3.减少冗余记录
2.查询执行路径
1.客户端发送查询语句到服务器
2.检索是否命中缓存,命中则直接返回
3.未命中则进行sql解析、预处理,再由优化器生成对应的执行计划
4.mysql根据优化器生成的执行计划,调用存储引擎的api进行查询
5.将结果返回给客户端
解析器作用:使用mysql解析器验证和解析查询(是否使用错误的关键字)
预处理器作用:检查表和列是否存在
查询优化器:预测查询执行成本,选择最小的一个
查询执行引擎:调用存储引擎(如:innodb的接口)
3.查看当前mysql连接及连接状态
1.使用show full processlist命令即可查看
各状态含义如下
4.查询优化
1.统计结果集行数,使用cout(*)最好
2.优化关联查询
1.确保on/using子句的列上有索引
2.确保group by /order by 只涉及一列
5.mysql字符集设置
1.
2.UTF-8是多字节编码,1.导致存储字节数增多,2.索引长度变短,3.如果只用来储存英文字符(单字节)那还好
# 6.查询缓存
1.如果查询语句中包含任何的不确定函数,那么在查询缓存中是不可能找到缓存结果的
2.当查询中有不确定的数据,则不会命中缓存。
3.长时间运行的事务,会大大降低查询缓存的命中率
注:
Q:为啥varchar是可变长的,但是不将所有字段定为varchar(255)
A:在磁盘中为实际长度,但在内存中需分配定义的完整长度-255,对内存消耗大
Q:mysql不允许对一个表进行查询和更新
A:
Q:单表数据量过大时,使用mysql分区功能,还是垂直分表?
A:?
Q:mysql比较字符串大小时报错
A:可能是字符集设置的不匹配