msql 优化
发布日期:2021-07-21 06:32:00 浏览次数:2 分类:技术文章

本文共 1200 字,大约阅读时间需要 4 分钟。

 

 

  1. 如果多处使用了join ,那么join的这个字段要加索引,同时这个字段的数据类型一定要一致,不然索引无效。
  2. 如果是join,那么这关联表的字符集要一致。
  3. 千万不要用随机排序 ORDER BY RAND(),因为太耗CPU,如果不是实时的,可以每隔一段时间查好后放在一个临时表。
  4. 避免使用SELECT * ,这会增加网络传输的负载。
  5. 永远要为每个表设置一个主键ID,最好是INT的自动增长,varchar当主键会使得性能下降,,主键以后还可以用于集群,分表等。
  6. 枚举时,使用INT,而不是VARCHAR,可使用最小INT的TINYINT。比如性别 状态。
  7. 尽可能使用NOT NULL,除了特殊需求,字段应该保持NOT NULL。NULL也是需要额外空间的,并不是空。因为NULL “ ”,程序要判断。
  8. 固定长度的表会更快,因为固定长度容易计算下一个数据的偏移量,因为所有字段长度都一样,所以这一行的数据长度就一样,更容易定位指针(mysql 是C写的),读取时会更些,固定长度的表也容易缓存、重构。确定就是会浪费一些空间。如果表包含其中一个这些字段就不是固定长度静态表,VARCHAR,TEXT,BLOB(图片)。
  9. 图片不要存到数据库,图片转化为二进制,把二进制存到BLOB,当图片多,非常耗性能。
  10. 垂直分割,就是把数据库中的一个表,按列变成很多个表,可以降低表的复杂度和字段的数目,从而达到优化的目的。
  11. 拆分大的DELETE或INSERT,在执行一个大的DELETE或INSERT查询时,要非常小心,要避免操作 锁表。
  12. 越小的列会越快。比如如果不需要记录时间,就用DAATE,要比DATETIME更经济
  13. 选择正确的存储引擎,MYISAM适合需要大量查询的应用,但对写操作不友好,甚至一个update一个字段,整个表会被锁起来,别的进程就无法进行读写操作,另外,MyISAM 对SELECT COUNT(*)这类计算超快。  而InnoBD的趋势会是一个非常复杂的存储引擎,会比MyISAM慢,但它支持“行锁”,所以对写操作较多时会更好,同时支持更多高级应用,比如事务。
  14. 小心使用永久链接,就是程序使用长链接。,长链接好在可以不用总去创建新的链接,但是也会有风险就是链接数过大。

    短链接的缺点:创建一个连接,程序执行完毕后,就会自动断掉与mysqlserver的链接。 会多少次这样的创建和释放过程。频繁地创建和释放连接,比较耗费cpu资源。长连接就可以避免每次请求都创建连接的开销,节省了时间和IO消耗。链接过大可以看这篇文章: 

 

查看连接:

show processlist;   只展示100个连接

show full processlist;    展示所有连接

 

查看超时时间:

show variables like '%timeout%'; 

闲置连接的超时时间由wait_timeout控制、默认8小时。

 

 

 

转载地址:https://blog.csdn.net/liuming690452074/article/details/103587326 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:mysql的存储引擎 MyISAM 与innoBD比较
下一篇:POI的 CellRangeAddress 参数

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2024年04月04日 08时53分21秒