zoukankan      html  css  js  c++  java
  • mysql性能优化

    1、MyISAMInnoDB的选择。

      MyISAM用的是表锁,InnoDB用的是行锁。

      MyIsam写优先,进行写操作时,会锁表。InnoDB写操作时锁行。因而如果写操作比较频繁应该用InnoDB较好。

      另MyIsam 语句select count(*) from table数据直接被缓存了。而InnoDB则仍需逐行读取,因而较慢。但如果加上where条件,二者就差不多了

    2、善用MySQL查询缓存。

      不要写些变态语句。例如查询条件中加上NOW() ,CURDATE()等条件。无法缓存。

    3、合理建立索引。

      Mysql索引有四种类型:主键索引(primary key)、唯一索引(unique key)、普通索引(key)、全文索引(full)[innodb不存在这种类型]。

    4、查询语句性能分析

      通过explan来分析查询语句。

      select SQL_NO_CACHE... 来避免查询缓存的使用。

    5、当只要一行数据时使用 LIMIT 1 

      使用limit 1来避免全表检索。

    6、避免select * 。

      从数据库里读出越多的数据,那么查询就会变得越慢。并且,如果你的数据库服务器和WEB服务器是两台独立的服务器的话,这还会增加网络传输的负载。 并且会加重查询缓存的负担。

    7、尽可能的使用NOT NULL值。

    8、固定长度的表会更快。

      固定长度的表会提高性能,因为MySQL搜寻得会更快一些,因为这些固定的长度是很容易计算下一个数据的偏移量的,所以读取的自然也会很快。

    9、垂直分割。

      “垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。

      示例一:在Users表中有一个字段是家庭地址,这个字段是可选字段,相比起,而且你在数据库操作的时候除了个人信息外,你并不需要经常读取或是改写这个字段。那么,为什么不把他放到另外一张表中呢? 这样会让你的表有更好的性能,大家想想是不是,大量的时候,我对于用户表来说,只有用户ID,用户名,口令,用户角色等会被经常使用。小一点的表总是会有好的性能。 

      示例二: 你有一个叫 “last_login” 的字段,它会在每次用户登录时被更新。但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个字段放到另一个表中,这样就不会影响你对用户 ID,用户名,用户角色的不停地读取了,因为查询缓存会帮你增加很多性能。 

      另外,你需要注意的是,这些被分出去的字段所形成的表,你不会经常性地去Join他们,不然的话,这样的性能会比不分割时还要差,而且,会是极数级的下降。 

    10. 拆分大的 DELETE 或 INSERT 语句 

  • 相关阅读:
    Kubernetes 内存资源限制实战
    kubernetes 资源管理概述
    终于对探针下手了
    容器和容器云
    理解 Kubernetes volume 和 共享存储
    理解 docker volume
    docker 镜像管理之 overlay2 最佳实践
    docker 资源限制之 cgroup
    Debug Assertion Failed!
    Qt 字符串转md5
  • 原文地址:https://www.cnblogs.com/killallspree/p/4222627.html
Copyright © 2011-2022 走看看