Mysql性能优化

一:数据库对于查询方面的性能优化:

1. 为查询缓存优化查询
大多数的 MySql 服务器都开启了查询缓存。这是提高性最有效的方法之 一,当有很多相同的查询被执行了多次的时候,这些查询结果会被放到一个缓存中,这样,后续的相同的查询就不用操作表而直接访问缓存结果了**。
2. explain关键字优化select 查询**
  使用 explain 关键字可以让你知道MySql是如何处理你的 SQL 语句的。这可以帮助分析查询语句或是表结构的性能瓶颈。explain的查询结果会以参数的形式展示底层是如何操作该sql语句的,建议挑一个你的select语句(推荐挑选那个最复杂的,有多表联接的),把关键字explain加到前面
3. 当只要一行数据时使用 limit 1
  当你查询表的有些时候,前提你已经知道结果只会有一条结果。在这种情况下,加上 limit1 可以增加性能。这样一样,MySql 数据库引擎会在找到一条数据后停止搜索,而不是继续往后查少下一条符合记录的数据。
4. 经常搜索字段建索引
  索引并不一定就是给主键或是唯一的字段来建立的。如果表中有某个字段你总要会经常用来做搜索为其建立索引
5. 避免使用 select
  从数据库里读出越多的数据,那么查询就会变得越慢。所以,应该养成一个需要什么就取什么的好的习惯。
6.使用union all
   UNION ALL 要比 UNION 快很多,所以,如果可以确认合并的两个结果集中不包含重复数据且不需要排序时的话,那么就使用 UNION ALL。对重复结果的处理:UNION 在进行表连接接后会筛选掉重复的记录,Union All 不会去除重复记录。对排序的处理:Union 将会按照字段的顺序进行排 序;UNION ALL 只是简单的将两个结果合并后就返回
  
二:数据库对于创建表方面的性能优化:

1.对于数据库中的字段尽可能使用固定长度char
2.对表进行垂直分割**
“垂直分割”是一种把数据库中的表按列变成几张表的方法,这样可以降低表的复杂度和字段的数目,从而达到优化的目的。例如有一个叫 “last_login” 的字段,它会在每次用户登录时被 更新。但是,每次更新时会导致该表的查询缓存被清空。所以,你可以把这个字段放到另一个表中,这样就不会影响用户 id,用户名,等其他字段的不停地读取了。
3. 永远为每张表设置一个 ID
  我们应该为数据库里的每张表都设置一个 ID 做为其主键,而且最好的是一 个 INT 型的(推荐使用 UNSIGNED),并设置上自动增加的 AUTO_INCREMENT 标 志。
4.选择正确的存储引擎
  在 MySQL 中有两个存储引擎 MyISAM 和 InnoDB,每个引擎都有利有弊。
两种存储引擎的区别:https://blog.youkuaiyun.com/weixin_44774355/article/details/104425305
  MyISAM 适合于一些需要大量查询的应用,但其对于有大量写操作并不是很 好。甚至你只是需要 update 一个字段,整个表都会被锁起来,而别的进程,就算是
读进程都无法操作直到读操作完成。另外,MyISAM 对于 SELECT COUNT(*) 这类的计算是超快无比的。
  InnoDB 的趋势会是一个非常复杂的存储引擎,对于一些小的应用,它会比 MyISAM 还慢。他是它支持“行锁” ,于是在写操作比较多的时候,会更优秀。
并且,他还支持更多的高级应用,比如:事务。
5.表中的字段尽可能的使用not null
6.外键约束会影响插入和删除操作,所以在设计表时候会删除外键的操作

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值