MySQL数据库的优化:
   数据库优化的目的:
          1、避免出现页面访问错误(
                          由于数据库连接timeout产生的5XX错误
                          由于慢查询造成页面无法加载
                          由于阻塞造成数据无法提交)
          2、 增加数据库的稳定性(很多数据库问题都是由于低低效查询引起的)
          3、优化用户体验(流畅页面的访问速度 , 良好的网站功能体)
   可以从以下几个方面进行优化:SQL及索引,数据表结构,系统配置,硬件。其中SQL及索引最重要,首先我们要根据我们的需求写出结构良好的SQL,另外要根据SQL在表中建立有效的索引,但是如果我们的索引过多,不但会影响我们写入的效率,同时还会影响我们查询的效率,所以索引建立要适量有效。但是如果表结构设计不合理,我们就很难写出结构良好的SQL,所以要建立简洁明了的表结构,所以说在设计表结构的时候,我们要考虑怎样对表结构进行查询,怎样的表结构的设计才是有利于表结构的查询,然后是系统配置的优化,但是当前我们大多数的MySQL都是在lnuix系统上,但是系统上是有一些本身的限制,比如说:TCP/IP连接数的限制,打开文件数的限制和一些安全上的限制,因为MySQL查询是基于文件的,没查询一个表就要打开一个文件,如果文件数达到一定的限制,这个文件就无法打开。硬件优化,就是我们要选择更适合数据库的CPU,更快的IO,以及更多的内存,数据库数据要放在内存中查询修改,所以内存越大,对我们数据库的性能就越好,但CPU却不是这样的,CPU越大,不见得对数据库性能越好,因为SQL会对CPU的可数有限制,比如说他并不会用到太多的核数,有的查询他只用于单核,所以说CUP也对数据库有影响,并不是核数越多越好,而IO,目前由于多新型IO设备,如 ssd,,但它并不能减少数据库锁的机制,因为锁是数据库保存完整性的一种机制,虽然IO很快,但它并不能减少阻塞,所以我们说硬件上的优化是成本最高但效果最差的,所以说如果慢查询很多,阻塞很多,那么并发量就会上去,导致应用响应缓慢。
 
1.SQL及索引的优化
    对Max(),Count()函数的优化,子查询的优化,group by 的优化(目的是减少IO),limit优化(使用有索引的列或主键进行orderby操作以避免IO)
 
     a. 如何选择合适的列建立索引: 在where从句,group by, order by,on从句中出现的列建立索引;索引字段越小越好;离散度大的列放到联合索引的前面。
     b.索引的维护及优化------重复及冗余索引和对不用索引的删除
 2.数据库结构的优化
    a.选择合适的数据类型,数据类型的选择,重点在于合适。 
     b.表的范式化和反范式化(范式化指的是表设计的规则) 
         反范式化是指为了查询效率的考虑把原本符合第三范式的表适当的增加冗余,已达到优化效率的目的,反范式化是以空间换时间的做法。
     c.表的垂直拆分,解决了表的宽度问题。将不常用的字段拆分出来。
     d.表的水平拆分,解决表的数据量过大的问题。
3.系统配置的优化。及MySQL配置文件的优化   
 
根据SQL语句中以下关键词建立索引:
 
查找:select
       
别名:AS
    select id AS userId,username AS uname From users;
查询结果分组:group by
   select sex from users group by sex;
  分组条件:HAVING +聚合函数、或者是having后的字段出现在select后面
    select age,sex from users group by sex HAVING age>2;
  对分组结果进行排序:order by    DESC 表示降序 默认为ASC升序
      select * from users order by id DESC; 
限制查询结果返回的数量:limit
    select * from users LIMIT 2;/LIMIT 2,2 (指的是从第三条开始,限制2条)
插入insert:
    insert test(username) select username from users where age>27;
更新:update
子查询:(not)in,(not)exists
向单表插入:insert table_user1(username) select age from table_user2 group by age;
连接类型:inner join,内连接
              在MySQL中,join,cross join 和 inner join 是等价的。
       left [outer] join,左外连接
       right [outer] join,右外连接
   select username,age,sex 
   inner join  user2;
函数:
select CONCAT(username,age) AS u FROM user;//字符串链接
聚合函数:Avg(),Count(),Max(),Min(),Sum()
加密函数:MD5(),Password()

mysql数据库索引优化的更多相关文章

  1. 知识点:Mysql 数据库索引优化实战(4)

    知识点:Mysql 索引原理完全手册(1) 知识点:Mysql 索引原理完全手册(2) 知识点:Mysql 索引优化实战(3) 知识点:Mysql 数据库索引优化实战(4) 一:插入订单 业务逻辑:插 ...

  2. mysql数据库索引优化与实践(一)

    前言 mysql数据库是现在应用最广泛的数据库系统.与数据库打交道是每个Java程序员日常工作之一,索引优化是必备的技能之一. 为什么要了解索引 真实案例 案例一:大学有段时间学习爬虫,爬取了知乎30 ...

  3. MySql数据库索引优化注意事项

    设计好MySql的索引可以让你的数据库飞起来,大大的提高数据库效率.设计MySql索引的时候有一下几点注意: 1,创建索引 对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为 ...

  4. Mysql DBA 运维 MySQL数据库索引优化及数据丢失案例 MySQL备份-增量备份及数据恢复基础实战 MySQL数据库生产场景核心优化

    需要的联系我,QQ:1844912514

  5. mysql数据库性能优化(包括SQL,表结构,索引,缓存)

    优化目标减少 IO 次数IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是 SQL 优化中需要第一优先考虑,当 ...

  6. MySQL 数据库性能优化之索引优化

    接着上一篇 MySQL 数据库性能优化之表结构,这是 MySQL数据库性能优化专题 系列的第三篇文章:MySQL 数据库性能优化之索引优化 大家都知道索引对于数据访问的性能有非常关键的作用,都知道索引 ...

  7. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...

  8. MYSQL数据库的优化

    我们究竟应该如何对MySQL数据库进行优化?下面我就从MySQL对硬件的选择.MySQL的安装.my.cnf的优化.MySQL如何进行架构设计及数据切分等方面来说明这个问题. 服务器物理硬件的优化 在 ...

  9. MySQL数据库的优化(上)单机MySQL数据库的优化

    MySQL数据库的优化(上)单机MySQL数据库的优化 2011-03-08 08:49 抚琴煮酒 51CTO 字号:T | T 公司网站访问量越来越大,导致MySQL的压力越来越大,让我们自然想到的 ...

随机推荐

  1. vmware fusion 进入 BIOS

    要进入bios有三种方法:1.>启动的时候按F2即可进入bios进行一些启动盘等选项的操作.但是,启动的时候很难第一时间按F2成功进入bios, 2.>修改vmware 进入bios之前的 ...

  2. 云时代架构阅读笔记十一——数据库SQL优化

    网上关于SQL优化的教程很多,但是比较杂乱.近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 ...

  3. SpringBoot#应用启动后执行某些逻辑

    // 方式1 @Component public class WhenStartupA implements InitializingBean { @Override public void afte ...

  4. Android Studio相关

    1.下载安装 Android Studio 2.打开已有或是新建工程,gradle编译时候会报错(被墙),可以切换阿里的源 修改build.gradle 的配置: buildscript { repo ...

  5. canvas绘制表盘时钟

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  6. Python 日志模块详解

    前言 我们知道查看日志是开发人员日常获取信息.排查异常.发现问题的最好途径,日志记录中通常会标记有异常产生的原因.发生时间.具体错误行数等信息,这极大的节省了我们的排查时间,无形中提高了编码效率.所以 ...

  7. 09 MySQL字符集

    字符集的选择     1.数据库方面最流行的是UTF-8     2.如果只考虑支持汉字,那么使用GBK,毕竟GBK下,每个汉字只占用2个字节,而UTF-8需要3个字节.     3.如果需要做大量的 ...

  8. P1051复数乘法

    P1051复数乘法 转跳点:

  9. mysql 免安装版密码操作

    登录MySQL:mysql -u root -p 1.修改用户密码: mysql> GRANT ALL ON . TO ‘root’@’localhost’ IDENTIFIED BY ‘123 ...

  10. 又一个无效的列类型错误Error setting null for parameter #7 with JdbcType NULL . Try setting a different JdbcType for this parameter or a different jdbcTypeForNull configuration property. Cause: java.sql.SQLExcept

    在更新数据时候出现的错误 更新代码如下: <update id="modify" parameterType="Standard"> update ...