mysql优化之sql执行流程及表结构(schema)对性能的影响

part 1 sql执行流程(如下图所示)

1、客户端发送一条查询到服务器。

2、服务器通过权限检查后,先检查查询缓存,命中则直接返回结果。否则进入3。

3、服务器进行sql解析,预处理,再由优化器根据该sql涉及到的数据表的信息计算,生成执行计划。

4.、MySQL根据优化器生成的执行计划,调用存储引擎的API来执行查询;
5.、将结果返回给客户端。

总结:SQL执行的最大瓶颈在于磁盘的IO,即数据的读取;不同SQL的写法,会造成不同的执行计划的执行,而不同的执行计划在IO的上面临完全不一样的数量级,从而造成性能的差距;优化SQL,其实就是让查询优化器根据你所希望的执行过程来选择匹配的执行计划,减少查询中产生的IO

part 2 表结构(schema)对性能的影响

1、数据库三范式,适当设置冗余数据

1NF:是指数据库表的每一列都是不可分割的基本数据项,同一列中不能有多个值,不满足第一范式的数据库不是关系型数据库。

2NF:数据库表中的每个实例或行必须可以被惟一地区分。

3NF:数据库表中只包含其它表中的主关键字信息。 (不允许有冗余数据)

2、大表拆小表,有大数据的列单独拆成小表

3、把常用属性分离成小表 ,这样可以减少查询常用属性需要查询的列,便于常用属性的集中缓存

原文地址:https://www.cnblogs.com/hungryforknowedge/p/10023381.html

时间: 2024-11-08 16:46:36

mysql优化之sql执行流程及表结构(schema)对性能的影响的相关文章

步步深入:MySQL架构总览->查询执行流程->SQL解析顺序

前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的‘SQL Layer’,下层是各种各样对上提供接口的存储引擎,被称为‘Storage Engin

MySQL架构总览->查询执行流程->SQL解析顺序

前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来探讨一下其中的知识. 一.MySQL架构总览: 架构最好看图,再配上必要的说明文字. 下图根据参考书籍中一图为原本,再在其上添加上了自己的理解. 从上图中我们可以看到,整个架构分为两层,上层是MySQLD的被称为的'SQL Layer',下层是各种各样对上提供接口的存储引擎,被称为'Storage Engin

基本sql语句--sql执行流程及调优

SQL分类 和大多数关系型数据库一样,mysql也具有以下几种类型的SQL语句: DML语句:主要用于新增,修改,删除和查询数据库的记录,关键字:insert,update,delete和select DCL语句:主要用于控制数据库对象(库,表,字段.用户等对象)的访问,关键字:grant,revoke DDL语句:主要用于定义和修改数据库对象的结构,常用关键字:create,drop,alter 注:DML(DELETE,UPDATE,SELECT)才 是我们关注的重点,而其中DELETE,U

Mysql体系结构及sql执行过程总结

Mysql体系结构及sql执行过程总结 一.体系结构图 各模块说明: 1.Connectors:各应用程序与SQL的交互 2. Management Serveices & Utilities:系统管理和控制工具 3.Connection Pool:连接池 管理缓冲用户连接,线程处理等需要缓存的需求 4.SQL Interfaces:SQL接口 接受用户的SQL命令,并且返回用户需要查询的结果.例如select from就是调用SQL Interface 5.Parser:解析器 (1)将SQL

Hive SQL执行流程分析

转自 http://www.tuicool.com/articles/qyUzQj 最近在研究Impala,还是先回顾下Hive的SQL执行流程吧. Hive有三种用户接口: cli (Command line interface) bin/hive或bin/hive –service cli 命令行方式(默认) hive-server/hive-server2 bin/hive –service hiveserver 或bin/hive –service hiveserver2 通过JDBC/

转 深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇)

深入浅出Mybatis系列(十)---SQL执行流程分析(源码篇) 最近太忙了,一直没时间继续更新博客,今天忙里偷闲继续我的Mybatis学习之旅.在前九篇中,介绍了mybatis的配置以及使用, 那么本篇将走进mybatis的源码,分析mybatis 的执行流程, 好啦,鄙人不喜欢口水话,还是直接上干活吧: 1. SqlSessionFactory 与 SqlSession. 通过前面的章节对于mybatis 的介绍及使用,大家都能体会到SqlSession的重要性了吧, 没错,从表面上来看,

驰骋工作流引擎设计系列04 流程引擎表结构的设计

第1节. 关键字 驰骋工作流引擎 流程快速开发平台 workflow ccflow jflow 第1节. 流程引擎表结构的设计 流程引擎表是流程引擎控制流程运转的数据存储表,是整个流程引擎的核心表.理解表结构,掌握状态字段,相关字段变化的规律,就掌握的整个流程引擎运转的规律了. 1.1.1: 流程引擎表的作用 流程引擎表,是用来存储流程运行中信息的表. 流程在运行过程中,需要把中间数据写入到该表中. 一个流程启动后,就创建一个workid,就在流程引擎注册表里注册一条数据,有一个字段WFStat

SQL Server2008无法修改表结构?

之前一直用SQL Server2005的数据库,最近升级到2008之后发现修改不了表结构,提示: 根据提示,取消"阻止保存要求重新创建表的更改"后就可以了. 具体操作:SQL Server Management studio-->工具-->选项-->Designers-->表设计器和数据库设计器-->取消"阻止保存要求重新创建表的更改"保存即可. SQL Server2008无法修改表结构?,布布扣,bubuko.com

(3)mysql优化之sql语句优化

概述 该篇主要介绍一些常用的sql优化技巧 sql优化 1.select * from table_name where; 建议将*改为需要的列.这对速度不会有明显的影响,主要考虑节省内存. 2.like语句 一般情况下不鼓励使用like操作,如果非使用不可,如何使用也是一个问题.like "%aaa%" 不会使用索引而like "aaa%"可以使用索引. 3.不要在列上进行运算,无法运用索引 select * from users where YEAR(addda