mysql中的的SQL优化

 

 

 

Insert优化

要建立数据库,肯定避免不了很多数据一起插入进去,比如说有100万条数据,一下子插进去的话性能肯定会很差,而且很麻烦,而且吗,万一插入到一半系统宕机了就尴尬了,所以插入的优化可以采用事务的手段,即一起插入,一条失败就回滚的策略,这样只需要提交一次,会更加方便
不仅如此,还可以使用load的方式,直接将数据加载进去

主键优化

这里就不得不讲到一个插入机制,每个页里面,都会放着一定数量的数据

当第一页插满之后,就再重新开一页,继续插入数据,这是按顺序插入,那么问题来了,要是乱序插入怎么办,总不能直接放在后面吧

因为毕竟得按顺序,所以就会涉及到一个页分裂,比如插入一个50,50是在47的后面,那么47往前的一半的数据就复制到新开的第三页2里面,然后再把50放47后面去,那它们放到第三页不是乱了吗,没事,第三页指向第一页,第二页,指向第三页,直接用链表这个方法解决问题,比如说要删除数据,第一页删除了一半,然后第二页只有一半数据,那么两页各空出来一半,很浪费对吧,这时候就会涉及到一个页合并,就是第二页的那些会直接剪切到第一页来,这就是mysql强大的地方

但是啊一直用myqsl的这些页合并以及页分裂,就相当于一直叫MySQL做累活,性能肯定不高,所以啊,就要避免所谓的页分裂,所以还是尽量顺序插入

orderby 优化
使用orderby 优化的一个重要手段就是,给order的字段建立索引,这样就不用回表,加快性能,那么建立索引了就万事大吉了吗,不比如说,在MySQL,我们创建的索引默认是升序索引,这是什么意思呢,比如说,我们进行降序查询,那么就会造成一个反向查询,性能就会不好,所以,要么我们迎合默认索引,要么建立索引的时候,要做一个降序索引。,接着,也要记得遵循最左前缀法则

group by优化
group by,比如说跟据name进行查询,假如说name没有建立索引,就会导致using temporary嘛,效率很低,此时也可以采用建立索引的方式,那么比如说建立了联合索引 name_age 那么只根据age查询的话,也会导致using temporary,此时应该根据 name age 进行查询,才能using index效率提高,因为这也遵循最左前缀法则

posted @ 2024-04-03 13:35  糖子哥  阅读(11)  评论(0编辑  收藏  举报