MySQL数据库性能优化方案

 


//导致数据库性能差的原因
数据性能差、响应慢、扫描行数、返回数据行数

 

 

 

 

 

数据库设计优化
1.要经常使用join,降低查询速度,结合业务加一下数据冗余

     {   1.作为查询条件字段、where
2 .适度加索引{ 2.如果是多字段情况,第一个字段要是经常作为查询条件的
     {  3.索引字段必须有足够的区分度
3.对表进行水平划分(年月区分建表)
4. 垂直划分(用户表,账号密码放一个表,通过主键id关联另一张表,基础信息)
5.适当的字段类型。
6.图片,文件使用文件存储系统,数据库中地址
7.外键清楚,一般实际开发中外键都要去除。
8.宁可批量操作,也不频繁操作
9.选择适合的引擎
10.字段类型,能使用数字,就尽量使用数字(固定长度)
11.尽量避免使用游标,游标操作的数据如果操作1W条,改写
12.避免大事物操作,索引优化。


SQL语句优化
1.慢日志,explain
2.避免全表扫描,考虑在where order by 子句简历索引
3.尽量避免在where子句中使用 null  否则放弃索引,进行全表扫描
4.能避免在子句中使用运算符(!=、<>)或函数(year())
5.避免使用or 、union all
6.能使用between就不要in
7.like 避免使用%%,不会走索引,D%走索引
8.避免写select *
9.join操作,小结果驱动大结果
10.分页查询时,甚数比较大,不能使用limit,尽量换成between
11.随机数尽量避免rand
12.分组统计count(列名)null不统计,全表扫描,count(*)统计所有行数据,会统计null。
13.无畏的排序,不要做
14.子查询exists、in,exists使用时子查询代替in子查询(类比:for(){if() break;})
15.索引不要太多,最好不要超过6个。


EXPLAIN SELECT * FROM tj_food_cookbook_ingerdients ci WHERE ci.TYPE = '主料' AND ci.COOKBOOK_ID = 249206;
-- type:All全表扫描,index遍历索引树,range索引范围扫描
-- ref:使用非唯一索引扫描或者唯一索引扫描的前缀扫描
-- const、system:单MySQL对查询某部分进行优化,并转换为一个常量时使用
-- null:MySQL在优化过程中分解语句,在执行时甚至不喊我表或者索引
-- 尽量避免全表扫描 explain + sql type 
system>const>eq_ref>ref>fulltext>ref or null >index_merge>unique_subquery...>range>index>all
一般要保证至少达到range级别,最好达到ref。

 

 

加索引
 -- 修改表结果语句、语法
alert Table 表明 add index index_nickname(nickname);
-- 删除索引
alter table 表名 drop index_nickname;
 --查询显示当前表有哪些索引
 show index from 表名;
-- 主键列、唯一列有默认索引
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值