1. 磁盘组成  和  磁盘读取过程
  2. 尽量减少 i/o 操作。
  3. 表结构设计:
    (1)三范式 :   原子性(不可拆分)、唯一性(不能有完全相同的数据)、无冗余性(不能有多余的数据),对于冗余性说明一下:拿订单来举例,订单表里面是不需要有商品总额字段的。因为可以在程序中通过代码计算出来。存到数据库中就显得多余了。
    (2)字段: 选择顺序:数字> 时间 > 字符串
    (3)字段大小:够用即可,不要浪费。
    (4)select * from 表名 procedure analyse()     这个命令可以帮助我们参考选择合适的字段大小。
    (5)表拆分:把常用的和不常用的分开,比如用户表,用户名常用,像年龄、婚否、职业等等没必要放在主表中,可以放在附表中。
    (6)反三范式:就是允许冗余。比如上面提到的商品总额,可以单独用一个字段存储,这样可以提高读取效率。为什么呢?往下看,比如总额用的少,那我是不是就不需要存储它,反过来说如果使用总额比较频繁,那么虽然通过计算可以得到总额,但是存在一个问题,就是你要查询其他的字段,比如购买商品数(实际中购买数量存在session中),单价,这样查询的反而比只查询一个总额字段效率低(这个例子可能不太恰当,就是会有类似这种情况发生的)。至于设计表时,怎么选择,就要看具体情况了。
  4. 数据库引擎选择:memory、myisam、innodb
    (1)memory是将数据存在内存中,mysql重启之后数据就会丢失。
    (2)myisam和innodb 的区别:
      事务:innodb支持,myisam不支持
      查询速度:myisam较快,innodb相对较慢
           全文索引:myisam支持,innodb不支持
           锁机制:myisam支持表锁,innodb 支持行级锁
           文件存储形式:myisam三个文件:     frm(存储表的结构),myi(存储表的索引),myd(存储表的数据)
                               innodb两个文件:frm(存储表的结构),ibd(存储数据和索引)
    查询较多时建议选择myisam,,需要事务支持选择innodb。
  5. mysql锁的分类:读锁:其他用户可以进行读操作,不能写操作。  写锁:其他用户不能读也不能写。
  6. 索引:通俗讲,就好比是字典的索引,书的目录。或者说好比把具有相同关键词的文章归一类存储,把具有另一个关键词的文章放在一起,这样查询的时候就会快很多。
  7. 索引原理:二叉树结构(就是二分查找算法原理)、hash索引
  8. 索引分类:主键、唯一索引、全文索引、一般索引。(索引参考文章)(再来一个,写的很好
  9. 慢查询:
    (1)如何定位执行较慢的语句:启动mysql服务并设置参数   
    mysqld_safe  --user=mysql  --slow_query_log  --slow_query_log_file=/tmp/slow_query.log  --long_query_time=1

    slow_query_log: 是否开启慢查询,slow_query_log_file: 慢查询日志文件存放位置,long_query_time:慢查询时间界限。

    (2)如果查看日志,可以借助mysql内置命令

    mysqldumpslow   /tmp/slow_query.log
  10. explain 可以分析SQL语句的执行计划以及检测是否使用索引。
    explain select*from user;  //explain放在查询语句之前

    执行上面语句后,会显示一张结果表,分析一下表里各个单词的含义。
    select_type:      搜索的类型
    table:                搜索的表名
    type:                 搜索的类型
    possible_keys: 可能用到的索引
    key:                  实际用到的索引
    key_len:           索引的长度
    ref:                   关联的字段
    rows:                扫描的行数
    Extra:               额外的信息

    关于type可能的值(性能由高到低排列):null>system>const>eq_ref>ref>range>index>all        针对这些值作如下解释:
    null:不使用索引,直接可以获得结果。

    explain select count(*) from user;

    system:表中满足条件的记录最多一条;

    explain select * from (select * from user limit 1) as a;

    const:表中满足条件的记录最多一条,通常出现在主键和唯一索引;

    explain select * from user where id = 1;

    eq_ref:表中某一列的值关联另一个表中主键列的值,通常用在联表查询;

    explain select * from user left join types on types.id = user.type_id;

    ref:通过普通索引查询;

    explain select * from user where username = '赵';

    range:索引范围查询;

    explain select * from user where id<10000;

    index:索引扫描;

    explain select id from user;

    all:全表扫描。

    explain select * from user;
    

      

  11. 命令行查看mysql语句执行时间:
    登录mysql
    mysql >
    //首先查看是否开启了profiling, mysql 版本必须大于5.0.37
    show variables like 'version'; ///查看mysql版本
    show variables like '%pro%'; //查看profiling是否开启
    //如果没有开启,则开启
    set profiling = on;
    // 执行mysql语句,show Profiles查看mysql语句执行时间
    show profiles;
    //会以表格的方式列出执行的每条语句的时间

mysql优化(上)的更多相关文章

  1. MySQL优化聊两句

    原文地址:http://www.cnblogs.com/verrion/p/mysql_optimised.html MySQL优化聊两句 MySQL不多介绍,今天聊两句该如何优化以及从哪些方面入手, ...

  2. 0104探究MySQL优化器对索引和JOIN顺序的选择

    转自http://www.jb51.net/article/67007.htm,感谢博主 本文通过一个案例来看看MySQL优化器如何选择索引和JOIN顺序.表结构和数据准备参考本文最后部分" ...

  3. mysql优化笔记之分页

    过年闲得蛋疼,于是看看mysql优化,看了网上好多关于分页的优化方法,但是呢,我亲自试上一把的时候,没有出现他们说的现象...难道是我的机器问题么? 下面看看我的实践记录,希望看到的加入进来交流一下O ...

  4. MySQL优化概述

    一. MySQL优化要点 MySQL优化是一门复杂的综合性技术,主要包括: 1 表的设计合理化(符合 3NF,必要时允许数据冗余) 2.1 SQL语句优化(以查询为主) 2.2 适当添加索引(主键索引 ...

  5. MySQL优化实例

    这周就要从泰笛离职了,在公司内部的wiki上,根据公司实际的项目,写了一些mysql的优化方法,供小组里的小伙伴参考下,没想到大家的热情很高,还专门搞了个ppt讲解了一下. 举了三个大家很容易犯错的地 ...

  6. Mysql优化系列(2)--通用化操作梳理

    前面有两篇文章详细介绍了mysql优化举措:Mysql优化系列(0)--总结性梳理Mysql优化系列(1)--Innodb引擎下mysql自身配置优化 下面分类罗列下Mysql性能优化的一些技巧,熟练 ...

  7. [转] MySql 优化 大数据优化

    一.我们可以且应该优化什么? 硬件 操作系统/软件库 SQL服务器(设置和查询) 应用编程接口(API) 应用程序 ------------------------------------------ ...

  8. 单表60亿记录等大数据场景的MySQL优化和运维之道

    此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...

  9. 【转】单表60亿记录等大数据场景的MySQL优化和运维之道 | 高可用架构

    此文是根据杨尚刚在[QCON高可用架构群]中,针对MySQL在单表海量记录等场景下,业界广泛关注的MySQL问题的经验分享整理而成,转发请注明出处. 杨尚刚,美图公司数据库高级DBA,负责美图后端数据 ...

  10. (转)MySQL优化实例

    在Apache, PHP,MySQL的体系架构中,MySQL对于性能的影响最大,也是关键的核心部分.对于Discuz!论坛程序也是如此,MySQL的设置是否合理优化,直接影响到论坛的速度和承载量!同时 ...

随机推荐

  1. MySQL+navicat-1064 Error解决方案

    MySQL+navicat-1064 Error解决方案 错误 #1064 - You have an error in your SQL syntax; check the manual that ...

  2. BOF和EOF详解2

    在学生信息管理系统中有多处用到EOF和BOF,使用BOF和EOF属性可确定Recordset对象是否包含记录,或者从一个记录移动到另一个记录是否超出Recordset对象的限制. BOF和EOF他们是 ...

  3. Day1 模拟赛 题解

    T1:首先你要发现,对于任意一个奇数i,i xor (i-1)=1; 那么我们可以将答案转化为统计有多少个1相互异或起来: 所以答案就那么几种: 如果你用的数位DP,只能说明你太高估day1T1了: ...

  4. 前缀和&二维前缀和

    我们知道,数组上的前缀和S[i]=S[i-1]+a[i] 那么,怎样求二维前缀和呢? 二维前缀和: 绿色点的前缀和就是黄色.红色.灰色和绿色的点权和 怎样计算? s[i][j]=s[i-1][j]+s ...

  5. PHP数组和对象之间的互换

    今天在和前端对接接口的时候,从后台返回数据给前端的时候出现如下JSON格式数据 "goods": [ { "id": "dEQ144800584Lx& ...

  6. centos编译安装python3怎么做?

    照着我的博客操作 你一定能成功的!因为我就是一步一步的做出来的,虽然只有文档,但是希望你能有耐心!!!! 编译安装难么麻烦,为什么还要编译安装? 那我告诉你想进步就要折腾!你习惯了windows的安装 ...

  7. X86逆向13:向程序中插入Dll

    本章我们将学习Dll的注入技巧,我们将把一个动态链接库永久的插入到目标程序中,让程序在运行后直接执行这个Dll文件,这一章的内容也可以看作是第八课的加强篇,第八课中我们向程序中插入了一个弹窗,有木有发 ...

  8. java中的接口和php的接口的区别

    php: 规范: 接口是一种特殊的抽象类,这种抽象类中只包含抽象方法和静态常量. 在接口中的抽象方法只能是public的,默认也是public权限. abstract和final修饰符也不能修饰接口中 ...

  9. 和 Python 2.x 说再见!项目移到python3

    如果你仍在使用 2.x,那么是时候将你的代码移植到 Python 3 了. 在技术的长河中,软件.工具.系统等版本的迭代本是常事,但由于使用习惯.版本的兼容性.易用性等因素,很多用户及开发者在使用或做 ...

  10. 【Git的基本操作九】ssh免密登录

    SSH免密登录 1. 进入用户家目录 cd ~ 2. 删除原有的 .ssh 目录 rm -r .ssh 3. 运行命令生成 .ssh 目录 ssh-keygen -t rsa -C github或gi ...