优化表设计

1、为什么要进行mysql优化?
假设我们设置一个数据量超过10万条记录的表,来进行我们经常做的查询操作比如:select * from 表名,服务器很慢甚至卡死,需要我们重启数据库服务器,这说明我们的表或者查询SQL是有问题的,所以我们要进行mysql优化

2、数据库优化的目标?
通过各种对数据库的优化方法,获取最高的查询和加载性能,达到查询性能的提高和加载性能的提高。

3、掌握优化的方式和途径
建表、索引、配置、SQL语句都需要优化

4、掌握建表和分表优化?
①数据库表设计符合范式要求:
	第一范式(1NF):是指数据库表的每一列都是不可分割的基本数据项
	第二范式(2NF)要求数据库表中的每个实例或行必须可以被唯一的区分
	第三范式(3NF)要求一个数据库表中不包含已在其它表中已包含的非主关键字信息。

适当反三范式。。。。

②数据库字段的设置要合理
介绍常用数据类型的特点及如何选择合适的数据类型:
int  4个字节
char 
varchar 
text 存储文件
decimal 存金钱
enum(枚举)只适合存字符串
float4个字节
 
从空间来说
BIGINT占用8个字节
CHAR要占用11个,在海量数据中差别很明显
从效率来说
INT效率更高
 
③为什么要分表?数据库中的数据量不一定是可控的,在未进行分表的情况下,随着时间和业务的发展,库中的表会越来越多,表中的数据量也会越来越大,相应地,数据操作,增删改查的开销也会越来越大;另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。④什么是分表?原本存储于一个表的数据分块存储到多个表上5、掌握数据库的查询优化①关键字一般放在SELECT查询语句的前面,用于描述MySQL如何执行查询操作、以及MySQL成功返回结果集需要执行的行数。解释输出列的含义(备注): select title from article where title like '菲律宾%';②数据库的优化查询主要有以下几个规则: 避免全表扫描 eg:select * from 表名;(不可取) 尽量使用索引查询 eg:select age from user where age>10; 避免使用select * 尽量使用数字型字段(把包含数值信息的字段设计为字符型,会降低查询和链接的性能,引擎在处理查询和链接会逐个比较字符串中的每个字符 ,而对于数字型而言只需要比较一次就够了) 避免向客户返回大量数据 避免大的事务性操作,提高系统并发能力一个插入500万行的事务,有索引2个导致别的操作缓慢,如果改成每次 插入5万行,插100次,这样别的操作会受影响小吗?5、掌握MySQL数据库的索引优化6、掌握数据库的配置优化7、掌握数据库的查询优化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值