zoukankan      html  css  js  c++  java
  • mysql 开发进阶篇系列 5 SQL 优化(表优化)

    一. 使用sql提示

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

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

    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类型。

          max_memory (默认值 8192) 是analyse在查找所有不同值时分配给每列的最大内存数。


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

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

        下面remark 字段里面值的最大长度的是30长度, 所以系统建议给出30长度:

      2. 通过折分提高表的访问效率
        折分可以是垂直拆分和水平拆分,这是一种设计思路,这篇不讲。

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

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

  • 相关阅读:
    Java的Object类
    java中String、StringBuffer、StringBuilder的区别
    Java正则表达式
    《java编程思想》P160-P180(第八章部分+第九章部分)
    《java编程思想》P140-P160(第七章复部+第八章部分)
    《java编程思想》P125-P140(第七章复用类部分)
    Servlet 工作原理解析
    大型高性能网站的十项规则
    Java 理论与实践: 并发在一定程度上使一切变得简单
    Java并发基础构建模块简介
  • 原文地址:https://www.cnblogs.com/MrHSR/p/9353549.html
Copyright © 2011-2022 走看看