关于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不需要再内存中创建临时表

优化分页

最新文章

  1. 【转】Apache Digest验证
  2. win8/10 特技
  3. JAVA类图
  4. SQL笔记1:SELECT及SELECT高级应用
  5. Mysql 如何删除数据表中的重复数据!
  6. 使用C#调用Python脚本,带参数列表 z
  7. Js编码和Java后台解码
  8. ASP.NET图片验证码学习!
  9. Java并发编程:CopyOnWrite容器的实现
  10. Bek Trak Trik for wireless WPA/WPA2 &amp; SSH &amp; email
  11. Linux中kettle自动化部署脚本
  12. Server对象(是属性)
  13. iOS 好文源码收藏
  14. 【Convex Optimization (by Boyd) 学习笔记】Chapter 1 - Mathematical Optimization
  15. C语言 &#183; 组合数
  16. 数据交互axios的用法
  17. Java匹马行天下之JavaSE核心技术——面向对象
  18. hdu3613 Best Reward【Manacher】
  19. 处理后台向前台传递的json数据
  20. 构建高性能数据库缓存之redis(二)

热门文章

  1. java数值运算后精度丢失问题
  2. WebLogic Server Components:XA Transactions
  3. How to leave the open file in eclipse tab after search?
  4. ubuntu16安装MySQL
  5. CAS登陆过程UML中文版
  6. js screen
  7. Lodop设置打印维护返回打印语句代码
  8. Lodop如何设置预览后导出带背景的图,打印不带背景图
  9. linux python3 selenuim firefox
  10. Ubuntu16.04 ERROR 1698 (28000): Access denied for user &#39;root&#39;@&#39;localhost&#39; 解决流程