mysql设计与查询的优化

mysql
1 尽量保持查询简单且只返回必须的数据,减小通信间数据包的大小和数量是一个非常好的习惯,这也是查询中尽量避免select * 以及加上limit 限制的原因
2 用多个小表代替一个大表
批量插入代替循环单条插入
合理控制缓存空间大小,一般来说大小设置为几十兆比较合适
可以通过sql_cache 和 sql_no_cache来控制是否x需要进行缓存
3 选择数据类型只要遵循小而简单的原则,越小的数据k类型通常会更快,占用更少的磁盘,内存,处理时需要的CPU周期也更少
4 指定宽度 对整数类型无效
5 数据类型用bigint 可以避免浮点数计算不准确和decimal 精确计算代价高的问题
6大表修改表时非常耗时,新建新的表结构,从旧表中查出所有数据插入新表

索引
通常说的索引是指B-Tree 索引   最常用 有效
选择性最强的索引列放在前面
索引的选择性:不重复的索引值和记录总数的比值
对于BLOB,TEXT VARCHAR类型发列,必须使用前缀索引只索引开始的部分字符
索引的使用条件: 小表:全表扫描更快  中到大表,索引非常有效,  大表: 建立和维护索引的代价会随之增长,这种就得靠率优化,例如分区


红黑树等平衡树也可以用来实现索引,但是文件系统及数据库系统普遍采用B+Tree 作为索引结构,因为访问磁盘数据有更高的性能


优化数据访问:
 只返回必要的列,不要select * 
 只返回必要的行: 使用LIMIT语句限制返回的数据
 缓存重复查询的数据: 使用缓存可以避免在数据库中重复查询
 减少服务器端扫描的次数: 最有效的方式是使用索引来覆盖查询

重构查询方式:
1切分大查询: 一个大查询如果一次执行,可能一次锁住很多数据,占满整个事务日志,耗尽资源系统,阻塞很多小但重要的查询
2: 分解大连接查询: 将一个大连接查询分解成对每一个表进行一次单表查询,然后在应用程序中进行关联:
 缓存更高效
分解成多个单表,这些单表查询的缓存结果更可能被其他查询使用到,从而减少冗余记录的查询
减少锁竞争
 


 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值