mysql 开发进阶篇系列 5 SQL 优化(表优化)

一. 使用sql提示

         sql 提示(sql hint)是优化数据库的一个重要手段, 是在sql语句中加入一些人为的提示来达到优化操做的目的。mysql

  1.1 use index
    在查询语句中表名的后面,添加use index 强制mysql使用该索引,不考虑其它索引。sql

EXPLAIN SELECT * FROM city USE INDEX(ix1) WHERE city_id=1;

  1.2 ignore index
    在查询语句中表名的后面,添加ignore index,使用mysql忽视一个或者多个索引。数据库

EXPLAIN SELECT * FROM city IGNORE INDEX(ix1) WHERE  city_id=14;

  1.3 force index
    在查询语句中表名的后面,添加force index,当mysql不走索引时,强制走索引。函数

-- 某些状况下,有索引但mysql不走索引,强制使用
EXPLAIN SELECT * FROM city FORCE INDEX (PRIMARY) WHERE  city_id>0;

 

二 .优化数据库对象几种方法

  1. 优化表的数据类型
    在mysql中,能够使用函数procedure analyse()对当前应用的表进行分析。对表列中的数据类型给出合理的改进建议,用户能够根据实际状况来考虑。性能

    PROCEDURE ANALYSE([max_elements,[max_memory]]) 优化

      max_elements (默认值 256) 是analyse注意到每列不一样值的最高数目。analyse使用此参数来检查是否最优化的列的类型是ENUM类型。spa

      max_memory (默认值 8192) 是analyse在查找全部不一样值时分配给每列的最大内存数。设计


  例如:下面生产库中有一个菜单表,字段类型及长度以下:code

-- 使用procedure analyse()分析
SELECT * FROM Adm_Menu PROCEDURE ANALYSE(16,256);

    下面remark 字段里面值的最大长度的是30长度, 因此系统建议给出30长度:对象

  2. 经过折分提升表的访问效率
    折分能够是垂直拆分和水平拆分,这是一种设计思路,这篇不讲。

  3. 逆规范化
    逆规范化也叫提升表的冗余,有利于提升查询性能。这是一种设计思路,这篇不讲。

  4. 使用中间表提升统计查询速度     好比有一个大表记录了客户的天天消费记录,须要按月统计总消费金额, 能够放入到中间表,减轻大表的频繁查询. 这是一种设计思路,这篇不讲。

相关文章
相关标签/搜索