Effective MySQL之SQL语句最优化

推荐本SQL优化的书《Effective MySQL之SQL语句最优化》。
主要讲解:如何去分析SQL的性能、索引的原理、如何创建合适的索引、如何去分析线上系统的性能瓶颈。

另外还介绍了几个辅助工具:
mysqldumpslow 来分析慢查询日志;
Google开源的mysql-slow-query-log-parser 分析慢查询日志;
应用程序中使用MySQL Proxy来收集SQL语句、QEP、查询执行时间;
开源Maatkit检查数据库中的重复索引;
Google的MySQL补丁,引入SHOW INDEX_STATISTICS 用来分析索引;
MySQL补丁microsecond-mysql-client可以对SQL进行微妙级别的监控;
开源sqlstats插件,统计SQL语句;

电子版下载地址:http://download.csdn.net/detail/bbirdsky/8207119

书不厚也就200页,以下是此书的目录:

第1章 DBA五分钟速成     1 
1.1 识别性能问题    2 
1.1.1 寻找运行缓慢的SQL语句  2 
1.1.2 确认低效查询 3 
1.2 优化查询     6 
1.2.1 不应该做的事情    6 
1.2.2 确认优化  7 
1.2.3 正确的方式     7 
1.2.4 备选的解决方案    9 
1.2 本章小结     9 

第2章 基本的分析命令     11 
2.1 EXPLAIN命令       12 
2.1.1 EXPLAIN PARTITIONS命令    14 
2.1.2 EXPLAIN EXTENDED命令      15 
2.2 SHOW CREATE TABLE命令      16 
2.3 SHOW INDEXES命令  18 
2.4 SHOW TABLE STATUS命令       19 
2.5 SHOW STATUS命令    22 
2.6 SHOW VARIABLES命令     25 
2.7 INFORMATION_SCHEMA   26 
2.8 本章小结     27 

第3章 深入理解MySQL的索引     29 
3.1 示例表  30 
3.2 MySQL索引用法 31 
3.2.1 数据完整性     32 
3.2.2 优化数据访问 33 
3.2.3 表连接      35 
3.2.4 结果排序  35 
3.2.5 聚合操作  35 
3.3 关于存储引擎    36 
3.4 索引专业术语    37 
3.5 MySQL索引类型 38 
3.5.1 索引数据结构理论       39 
3.5.2 MySQL实现      43 
3.6 MySQL分区  54 
3.7 本章小结     55 

第4章 创建MySQL索引    57 
4.1 本章范例中用到的表      58 
4.2 已有的索引 59 
4.3 单列索引     61 
4.3.1 创建单列索引的语法   61 
4.3.2 利用索引限制查询读取的行数 62 
4.3.3 使用索引连接表    64 
4.3.4 理解索引的基数    66 
4.3.5 使用索引进行模式匹配      69 
4.3.6 选择唯一的行 71 
4.3.7 结果排序  73 
4.4 多列索引     75 
4.4.1 确定使用何种索引       75 
4.4.2 多列索引的语法    79 
4.4.3 创建更好的索引    79 
4.4.4 多个列上的索引    82 
4.4.5 合并WHERE和ORDER BY语句       83 
4.4.6 MySQL优化器的特性    85 
4.4.7 查询提示  88 
4.4.8 复杂查询  92 
4.5 添加索引造成的影响      93 
4.5.1 DML影响  93 
4.5.2 DDL影响   96 
4.5.3 磁盘空间影响 97 
4.6 MySQL的限制和不足       100 
4.6.1 基于开销的优化器       100 
4.6.2 指定QEP  100 
4.6.3 索引的统计信息    100 
4.6.4 基于函数的索引    101 
4.6.5 一个表上的多个索引   101 
4.7 本章小结     101 

第5章 创建更好的MySQL索引     103 
5.1 更好的索引 104 
5.1.1 覆盖索引  104 
5.1.2 存储引擎的含义    109 
5.1.3 局部索引  110 
5.2 本章小结     114 

第6章 MySQL配置选项     117 
6.1 内存相关的系统变量      118 
6.1.1 key_buffer_size 120 
6.1.2 命名码缓冲区 121 
6.1.3 innodb_buffer_pool_size       122 
6.1.4 innodb_additional_mem_pool_size    124 
6.1.5 query_cache_size    125 
6.1.6 max_heap_table_size     126 
6.1.7 tmp_table_size 127 
6.1.8 join_buffer_size       129 
6.1.9 sort_buffer_size       129 
6.1.10 read_buffer_size    130 
6.1.11 read_rnd_buffer_size   130 
6.2 有关基础工具的变量      130 
6.2.1 slow_query_log 131 
6.2.2 slow_query_log_file       131 
6.2.3 general_log       131 
6.2.4 general_log_file      131 
6.2.5 long_query_time     132 
6.2.6 log_output  132 
6.2.7 profiling     132 
6.3 其他优化变量    133 
6.3.1 optimizer_switch     133 
6.3.2 default_storage_engine 133 
6.3.3 max_allowed_packet      134 
6.3.4 sql_mode   134 
6.3.5 innodb_strict_mode 134 
6.4 其他变量     134 
6.5 本章小结     135 

第7章 SQL的生命周期      137 
7.1 截取SQL语句    138 
7.1.1 全面查询日志 139 
7.1.2 慢查询日志     140 
7.1.3 二进制日志     142 
7.1.4 进程列表  143 
7.1.5 引擎状态  144 
7.1.6 MySQL连接器  145 
7.1.7 应用程序代码 146 
7.1.8 INFORMATION_SCHEMA       148 
7.1.9 PERFORMANCE_SCHEMA     148 
7.1.10 SQL语句统计插件       148 
7.1.11 MySQL Proxy   149 
7.1.12 TCP/IP       149 
7.2 识别有问题的语句   149 
7.2.1 慢查询日志分析    152 
7.2.2 TCP/IP分析       154 
7.3 确认语句执行    156 
7.3.1 环境   156 
7.3.2 时间统计  157 
7.4 语句分析     158 
7.5 语句优化     159 
7.6 结果验证     159 
7.7 本章小结     160 

第8章 性能优化之隐藏秘籍   161 
8.1 索引管理优化    162 
8.1.1 整合DDL语句       162 
8.1.2 去除重复索引 163 
8.1.3 删除不用的索引    164 
8.1.4 监控无效的索引    165 
8.2 索引列的改进    165 
8.2.1 数据类型  165 
8.2.2 列的类型  168 
8.3 其他SQL优化    170 
8.3.1 减少SQL语句 171 
8.3.2 简化SQL语句 178 
8.3.3 使用MySQL的复制功能     180 
8.4 本章小结     181 

第9章 MySQL EXPLAIN命令详解   183 
9.1 语法      184 
9.2 各列详解     185 
9.2.1 key       187 
9.2.2 rows    187 
9.2.3 possible_keys    190 
9.2.4 key_len       190 
9.2.5 table    192 
9.2.6 select_type 193 
9.2.7 partitions    194 
9.2.8 Extra    195 
9.2.9 id  197 
9.2.10 ref     197 
9.2.11 filtered     197 
9.2.12 type   198 
9.3 解释EXPLAIN输出结果   198 
9.4 本章小结     201
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
为了优化PG中的SQL查询速度,以下是一些常用的优化方法: 1. 确保正确的索引:在查询中使用适当的索引可以显著提高查询速度。通过使用EXPLAIN语句来分析查询计划,确定是否使用了适当的索引。如果没有使用索引或者使用了不合适的索引,可以考虑创建或修改索引以提高性能。 2. 优化查询语句:尽量避免使用复杂的查询语句,特别是在大型数据表上。使用合适的JOIN语句、WHERE条件和LIMIT限制来减少查询的数据量。避免使用子查询和不必要的字段选择。 3. 使用预处理语句:在应用程序中使用预处理语句可以提高查询性能。预处理语句将查询计划缓存起来,避免了每次查询都要重新解析和优化的开销。 4. 优化表结构:合理设计表结构可以提高查询性能。避免过度规范化,考虑使用冗余数据和适当的数据类型。合理选择主键和外键,以及适当的约束。 5. 配置PG参数:调整PG数据库的配置参数也可以提高查询性能。根据系统资源和负载情况,调整shared_buffers、work_mem、effective_cache_size等参数。 6. 数据分区和分片:对于超大数据表,可以考虑将数据进行分区或者分片,以减少查询的数据量和提高查询效率。 7. 定期维护和优化:定期进行数据库的维护工作,如VACUUM、ANALYZE、REINDEX等操作,以及定期优化查询语句和索引,可以保持数据库的良好性能。 以上是一些常见的PG SQL优化方法,具体的优化策略需要根据具体的查询和数据情况来确定。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值