关于mysql数据库优化
关于mysql数据库优化
以我之愚见,数据库的优化在于优化存储和查询速度
目前主要的优化我认为是优化查询速度,查询速度快了,提高了用户的体验
我认为优化主要从两方面进行考虑,
优化数据库对象,
优化sql
优化数据库对象
1.优化表的数据类型,对于每个字段用合适的数据类型,既能解决磁盘的存储空间,又能避免浪费程序运行时物理内存的浪费,提高查询速度。
比如对于不会有负数的整数类型,使用无符号整型,整数范围很小的用tinyint 或者smallint
2 通过拆分表来提高表的访问效率。(对于MyISAM)
垂直拆分,水平拆分,如果一个表中一些列常用,一些列不常用,可以用垂直拆分。缺点查询所有数据的时候需要连表。
3逆规范化
增加冗余列, 冗余列值得是多个表中有相同的列,这样做是避免查询的时候进行连表操作
增加派生列 之增加的列来自其他表的数据,由其他表的数据计算得到。这样是为了减少连接操作,避免使用聚合函数
重新组表 对用户经常查看的数据是使用两张表连起来的数据,可以重新租一张表,也是减少连表的操作
4使用中间表 中间表复制源表的部分数据,并且与源表隔离,在中间表上查询统计操作不会影响源表。
中间表可以灵活增加索引,或增加临时的字段,从而提高统计查询效率
二、sql优化
· 在表的查询中,有这个几种查询类型,
1遍历全表 all
2 扫描全索引 遍历整个索引 index
3 索引范围扫描,常见于< > >= between range
4使用非唯一索引或者唯一索引的前缀
5 唯一索引,对于每个索引的键值,表中只有一条记录匹配 eq_ref
6 const/system 单表中最多有一个匹配行,查询速度非常快,例如根据主键或者唯一索引
7 null 对于null, mysql不用返回直接能得到结果
索引是数据库优化最常用和最重要的手段之一。
索引的存储分类:
B-tree索引 最常用
HASH索引 只有memory支持
R-Tree索引 空间索引,不常用
Full-text 全文索引
比较常用的是B-Tree索引和hash索引,hash索引适合key-value查询,不适合范围查找
b-tree索引并不是二叉树,而是平衡树
注意对于查询的的列是字符串,要加上引号,不然不会用到索引。
对于 or 分隔开的条件,如果or 前面的列中有索引,而后面的列中没有索引,则不会用到索引。
对于插入操作
尽量使用多个值表的insert语句,这种方式大大减少客户端与数据库的连接,关闭等操作。
避免使用子查询,用效率更高的join,join 效率更高是因为mysq不需要再内存中创建临时表
优化分页
最新文章
- 【转】Apache Digest验证
- win8/10 特技
- JAVA类图
- SQL笔记1:SELECT及SELECT高级应用
- Mysql 如何删除数据表中的重复数据!
- 使用C#调用Python脚本,带参数列表 z
- Js编码和Java后台解码
- ASP.NET图片验证码学习!
- Java并发编程:CopyOnWrite容器的实现
- Bek Trak Trik for wireless WPA/WPA2 &; SSH &; email
- Linux中kettle自动化部署脚本
- Server对象(是属性)
- iOS 好文源码收藏
- 【Convex Optimization (by Boyd) 学习笔记】Chapter 1 - Mathematical Optimization
- C语言 &#183; 组合数
- 数据交互axios的用法
- Java匹马行天下之JavaSE核心技术——面向对象
- hdu3613 Best Reward【Manacher】
- 处理后台向前台传递的json数据
- 构建高性能数据库缓存之redis(二)
热门文章
- java数值运算后精度丢失问题
- WebLogic Server Components:XA Transactions
- How to leave the open file in eclipse tab after search?
- ubuntu16安装MySQL
- CAS登陆过程UML中文版
- js screen
- Lodop设置打印维护返回打印语句代码
- Lodop如何设置预览后导出带背景的图,打印不带背景图
- linux python3 selenuim firefox
- Ubuntu16.04 ERROR 1698 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; 解决流程