Effective MySQL之SQL语句最优化

2019-03-11 14:22|来源: -- --

内容简介
《Effective MySQL之SQL语句最优化》是由MySQL专家Ronald Bradford撰著,书中提供了很多可以用于改进数据库和应用程序性能的最佳实践技巧,并对这些技巧做了详细的解释。本书希望能够通过一步步详细介绍SQL优化的方法,帮助读者分析和调优有问题的SQL语句。

主要内容
● 找出收集和诊断问题必备的分析命令
● 创建MySQL索引来改进查询性能
● 掌握MySQL的查询执行计划
● 找出影响查询执行和性能的关键配置变量
● 用SQL语句优化的生命周期来识别、确
认、分析然后优化SQL语句,并检查优化的结果
● 学习使用不为常人所知的一些性能技巧来改进索引效率并简化SQL语句

作者简介
Ronald Bradford是一位在关系型数据库领域拥有20多年丰富经验的专家。他拥有深厚的专业背景以及10年以上Ingres和Oracle系统的工作知识,在过去12年中他致力于MySQL——世界上最流行的开源数据库的发展。他曾在2009年被提名为MySQL社区成员和2010年的Oracle ACE Director,其咨询领域的专家背景以及多次在国际会议上的发言也为他赢得了广泛的国际知名度。他还是Planet MySQL(2010)最受欢迎的个人MySQL技术博客作者,并且是清华大学出版社引进并出版的《PHP+MySQL专家编程》一书的作者之一。
MySQL在被Oracle公司收购之后成为主要的数据库解决方案,并获得了更多社区推广的机会。Ronald是世界范围的Oracle用户组中最受欢迎的MySQL的受邀发言人,该用户组的范围遍及北美、南美。。。


目录:

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

第2章 基本的分析命令
2.1 EXPLAIN命令
2.1.1 EXPLAIN PARTITIONS命令
2.1.2 EXPLAIN EXTENDED命令
2.2 SHOW CREATE TABLE命令
2.3 SHOWINDEXES命令
2.4 SHOW TABLE STATUS命令
2.5 SHOW STATUS命令
2.6 SHOWVARIABLES命令
2.7 rNFORMATION SCHEMA
2.8 本章小结

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

第4章 创建MySQL索引
第5章 创建更好的MySQL索引
第6章 MySQL配置选项
第7章 SQL的生命周期
第8章 性能优化之隐藏秘籍
第9章 MySQL EXPLAIN命令详解


相关问答

更多
  • 基本相同,都遵循SQL语言的语法规则。在SQL脚本上两者最大的区别是函数不一样和个别关键字不一样。比如Oracle里没有limit关键字,所以Oracle实现分页比MySQL麻烦。
  • 修复InnoDB并不像点击按钮那么简单。 MyISAM是。 在引擎盖下, OPTIMIZE TABLE将这样做到一个名为mytb的MyISAM表: 创建与mytb具有相同结构的空临时表 将mytb中的MyISAM数据复制到临时表中 放下桌子mytb 将临时表重命名为mytb 针对mytb运行ANALYZE TABLE并存储索引统计信息 由于两个主要原因,OPTMIZE TABLE不适用于InnoDB: 原因#1:InnoDB存储布局 默认情况下,InnoDB已禁用innodb_file_per_table ...
  • 你必须将关于用户和他们船只的信息分解成第三个表格。 所以你会有以下表格: t_ships: ship_id, name, credit_cost, mineral_cost, etc t_users: user_id, name, etc t_user_ships: ship_id, user_id, amount 通过这种方式添加船舶时,您只需更新表t_user_ships中的金额。 You have to split the information about users and their ship ...
  • 问:如果我有column1和column2的两个索引,则column1,column2的复合索引是否会改进两列的选择? 是的,然后综合指数更好。 来自Mysql “mysql> SELECT * FROM tbl_name WHERE col1 = val1 AND col2 = val2; 如果col1和col2上存在多列索引,则可以直接获取相应的行。 如果col1和col2上存在单独的单列索引,优化程序将尝试使用索引合并优化(请参见第8.3.1.4节“索引合并优化”),或尝试通过确定哪个索引排除更多行来 ...
  • 你在if语句中的声明会隐藏它外面的声明; 一旦if语句退出,那些被隐藏的声明就会超出范围并且永远消失。 要解决这个问题,你可以做类似的事情 if (stype == 1) { sprite1[0] = ' '; sprite1[3] = ' '; // ... 或者你可以使用像strcpy这样的功能来完成同样的事情。 顺便说一下,这种情况下,打开完整警告进行编译会显示错误,无需在此处发布。 Your declarations inside the if statement are ...
  • 所有这些都是功能相同的。 当完全使用INNER连接时,即使WHERE子句和JOIN条件之间的分离也不会改变结果(它可以与OUTER连接一起使用)。 此外,所有这些都应该在完全相同的查询计划中实现(实际上是零性能差异)。 包含项目的顺序无关紧要 。 查询引擎可以自由优化,因为它看起来最适合查询的功能规范。 即使您确定了与订单有关的特定行为,也不应指望它。 规范允许明天的补丁改变今天在这个领域的行为。 记住:SQL的重点是基于集合和声明 :你告诉数据库你想要它做什么,而不是你想要它做什么。 既然正确性和性能已不 ...
  • 在SQLfiddle上测试了以下内容 : SELECT employee.name AS "employee", SUM(s1.daily_amount) AS "amount" FROM work INNER JOIN salary s1 ON work.emp_id = s1.emp_id AND work.date >= s1.start_date LEFT JOIN salary s2 ON work.emp_id = s2.emp_id A ...
  • 您无法更改服务器进程的有效用户 - 只有root可以随意更改UNIX用户ID。 (澄清一下:如果你说copy to '/home/gvkv/mydata' ,服务器postgres进程将尝试编写该文件(运行为postgres / pgdba / whatever),而不是你的客户端psql(以你的身份运行)) 。 但是,您可以让服务器将数据流传输到客户端,然后让客户端通过使用客户端\ copy命令来编写它,即: \copy to '/home/gvkv/mydata' delim ...
  • i分配一个0的初始值,并将j分配给len(a)-1 。 i会递增, j每次循环迭代都会减1,同时从两端索引数组,并交换它们的值。 这个例子利用Go的能力将多个表达式的值分配给多个左值 。 i is assigned an initial value of 0, and j is assigned len(a)-1. i will be incremented and j will be decremented by one for each loop iteration, indexing the arra ...
  • $level始终以逗号分隔,只需将其打破并检查: public static function checkLevel($user, $level) { $level = explode(',', $level); if(!in_array($user->usertype, $level)) return array( 'error' => 'Please login before', 'errortype' => 0 ...