查询的最高原则,如果没有使用应用层缓存,每次查询尽量少产生无用的记录,包括无用的字段,毕竟传输结果集都比较费时,而且就算在mysql服务器本身查询无用记录,也是比较耗CPU和内存,更可能是浪费磁盘IO。
查询的过程中,有直接在服务层就直接过滤,或者在存储引擎层过滤,例如:where条件中如果带有索引,则是在引擎层过滤了,在服务器层过滤的话,则表示数据必须读上来
查询分解会比较好,例如:关联查询分解,复杂查询分解,大查询分解。大查询可能会锁表时间比较长,占用资源时间比较长,关联查询可能会产生很多重复的查询。
查询的语句的复杂度,尽量在应用层客户端完成,不要将复杂性放到服务器,毕竟应用层的灵活性比数据库服务器要高
查询优化分静态优化和动态优化
静态优化,就是在查询还未执行时,就已经优化了,类似编译时优化,如:根据统计信息以及语句本身
动态优化,主要是执行期的优化
查询语句本身需要进行查询计划分析
判定查询中的索引是否失效
但是排序和分组不知道是在存储引擎层还是服务器层完成的?
查询缓存与buffer pool什么关系?
阅读(1220) | 评论(0) | 转发(0) |