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

mysql 开发进阶篇系列 5 SQL 优化(表优化)的更多相关文章

  1. mysql 开发进阶篇系列 2 SQL优化(explain分析)

    接着上一篇sql优化来说 1. 定位执行效率较低的sql 语句 通过两种方式可以定位出效率较低的sql 语句. (1) 通过上篇讲的慢日志定位,在mysqld里写一个包含所有执行时间超过 long_q ...

  2. mysql 开发进阶篇系列 4 SQL 优化(各种优化方法点)

    1 通过handler_read 查看索引使用情况 如果索引经常被用到 那么handler_read_key的值将很高,这个值代表了一个行被索引值读的次数, 很低的值表明增加索引得到的性能改善不高,索 ...

  3. mysql 开发进阶篇系列 1 SQL优化(show status命令)

    一.概述 随着上线后,数据越来越多,很多sql语句开始显露出性能问题,本章介绍在mysql中优化sql语句的方法.  1.  通过show status 命令了解各种sql的执行频率 通过show [ ...

  4. mysql 开发进阶篇系列 3 SQL 优化(索引使用方法)

    一. 本章介绍mysql中的索引的分类,存储,使用方法的介绍 1.  索引的存储分类 MyISAM存储引擎的表的数据和索引是自动分开存储的,各自是独立的一个文件, innodb 存储引擎的表的数据和索 ...

  5. mysql 开发进阶篇系列 46 物理备份与恢复( xtrabackup的 选项说明,增加备份用户,完全备份案例)

    一. xtrabackup 选项说明 在操作xtrabackup备份与恢复之前,先看下该工具的选项,下面记录了xtrabackup二进制文件的部分命令行选项,后期把常用的选项在补上.点击查看xtrab ...

  6. mysql 开发进阶篇系列 42 逻辑备份与恢复(mysqldump 的完全恢复)

    一.概述 在作何数据库里,备份与恢复都是非常重要的.好的备份方法和备份策略将会使得数据库中的数据更加高效和安全.对于DBA来说,进行备份或恢复操作时要考虑的因素大概有如下: (1) 确定要备份的表的存 ...

  7. mysql 开发进阶篇系列 55 权限与安全(安全事项 )

    一. 操作系统层面安全 对于数据库来说,安全很重要,本章将从操作系统和数据库两个层面对mysql的安全问题进行了解. 1. 严格控制操作系统账号和权限 在数据库服务器上要严格控制操作系统的账号和权限, ...

  8. mysql 开发进阶篇系列 47 物理备份与恢复(xtrabackup 的完全备份恢复,恢复后重启失败总结)

    一. 完全备份恢复说明 xtrabackup二进制文件有一个xtrabackup --copy-back选项,它将备份复制到服务器的datadir目录下.下面是通过 --target-dir 指定完全 ...

  9. mysql 开发进阶篇系列 20 MySQL Server(innodb_lock_wait_timeout,innodb_support_xa,innodb _log_*)

    1. innodb_lock_wait_timeout mysql 可以自动监测行锁导致的死锁并进行相应的处理,但是对于表锁导致的死锁不能自动监测,所以该参数主要用于,出现类似情况的时候等待指定的时间 ...

随机推荐

  1. java36

    1.Main public static void main(String [ ] args) public:被jvm调用的方法,权限要足够大 static:被jvm调用的方法,不需要创建对象,直接用 ...

  2. 在struts.xml中配置默认action遇到的问题

    初始代码: <?xml version="1.0" encoding="UTF-8" ?> <!DOCTYPE struts PUBLIC & ...

  3. Django的MVT模式与MVC模式

    Django的MVT模式与MVC模式 在正式开始coding之前,我觉得有必要探讨下Django的MVT模式,理论和实践相结合,才能更好的掌握一门技术.Django中的MVT模式,Django就是属于 ...

  4. 第45章:MongoDB-集群--Sharding(分片)--分片的管理

    ①列出所有的Shard db.runCommand({“listshards”:1}); ②查看分片信息 db.printShardingStatus(); ③判断是否分片 db.runCommand ...

  5. 第43章:MongoDB-集群--Sharding(分片)--多机的搭建

    ①环境准备 服务器规划 服务器[192.168.0.75] 服务器[192.168.0.84] 服务器[192.168.0.86] mongos mongos mongos config server ...

  6. 洛谷 p2440木材加工

    #include <iostream>#include <cstring>using namespace std;const int N = 1e5 + 100;int a[N ...

  7. Python是一门什么样的语言

    先做个总结:Python是一门动态解释型的强类型定义语言. 那何为动态?何为解释?何为强类型呢? 我们需要了解编译型和解释型.静态语言和动态语言.强类型定义语言和弱类型定义语言这6个概念就可知晓. 编 ...

  8. js的arguments到底是什么?

    类数组对象:arguments 总所周知,js是一门相当灵活的语言.当我们在js中在调用一个函数的时候,我们经常会给这个函数传递一些参数,js把传入到这个函数的全部参数存储在一个叫做arguments ...

  9. jenkins 修改log路径

    修改log路径 默认的路径是/var/log/jenkins/jenkins.log; 修改的话,同样是在/etc/init.d/jenkins中修改: JAVA_CMD="$JENKINS ...

  10. 一把梭系列 之 颜值不够VsCode来凑

    如果您的孩子不适应编译型语言怎么办? 如果您的孩子贪玩不想花多时间在编程上怎么办? 如果您还没有孩子怎么办? 如果您夜晚兼职觉不够睡又怎么办? 不妨试试 “ 拍 簧 片 ”. 妈了巴子的有点麻烦,但别 ...