sql优化

mysql的简介及体系结构

こ雲淡風輕ζ 提交于 2020-01-25 22:08:30
mysql的简介介绍 1、什么是mysql? mysql是一个开源的关系型数据库管理系统,现在是oracle公司旗下的一款产品,由C和C++语言编写,可移植性高。支持 在多种操作系统上安装,最常见有AIX,linux,window。mysql因为开源免费,所以受到了目前互联网行业的欢迎。 以mysql作为数据库,linux系统作为操作系统,apache或者nginx作为web服务器,perl/php/python作为服务端的脚 本解释器,就可以搭建起一个免费的网站。被业界称为LNMP或者LAMP 2、mysql体系结构 连接者 :不同语言的代码程序和mysql的交互(SQL交互) 1、 连接池 管理、缓冲用户的连接,线程处理等需要缓存的需求 2、 管理服务和工具组件 系统管理和控制工具,例如备份恢复、Mysql复制、集群等 3、 sql接口 接受用户的SQL命令,并且返回用户需要查询的结果 4、 查询解析器 SQL命令传递到解析器的时候会被解析器验证和解析(权限、语法结构) 5、 查询优化器 SQL语句在查询之前会使用查询优化器对查询进行优化 select id,name from user where age = 40; a、这个select 查询先根据where 语句进行选取,而不是先将表全部查询出来以后再进行age过滤 b、这个select查询先根据id和name进行属性投影

MySQL中的索引

五迷三道 提交于 2020-01-25 21:52:06
索引是一个比较复杂的模块,要学好需要多花点时间。索引是MySQL进行查询优化的一个很重要的手段,如果用得好,可以成为数据访问的有力而且灵活的工具,快速提高查询效率,所以多花点时间好好学习和思考这一块内容也是很值得的。下面,对MySQL中索引的内容做了一下归纳总结,有点零散。 01、索引基础 1、索引是存储引擎用于快速找到记录的一种数据结构。 2、索引是对查询性能优化最有效的手段。 3、B-树索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,取而代之的是索引的根节点开始进行搜索。根节点的槽中存放了指向子节点的指针,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下一层子节点,这些指针实际上定义了子节点页中值的上限和下限。最终存储引擎要么是找到对应的值,要么该记录不存在。 4、B-树对索引列是顺序组织存储的,所以很适合查找范围数据。 5、使用B-树索引适用于全键值、键值范围或键前缀查找。具体地: (1)全值匹配 (2)匹配最左前缀 (3)匹配列前缀 (4)匹配范围值 (5)精确匹配某一列并范围匹配另一列 (6)只访问索引的查询 6、如果不是按照索引的最左列开始查找,则无法使用索引。 7、不能跳过索引中的列。 8、如果查询中有某个列的范围查找,则其右边所有列都无法使用索引优化查找。 9、哈希索引:对于每一行数据

如何调优SQL

回眸只為那壹抹淺笑 提交于 2020-01-25 20:36:07
以MySQL为例 如何定位并优化慢查询Sql? 联合索引的最左匹配原则的成因? 索引是建立得越多越好吗? 一、如何定位并优化慢查询Sql? 根据慢日志定位慢查询sql 使用explain等工具分析sql 修改sql或者尽量让sql走索引 查看mysql变量 SHOW VARIABLES LIKE '%quer%' 显示慢查询的数量 SHOW STATUS LIKE '%slow_queries%' 打开慢查询日志 SET GLOBAL slow_query_log = ON; 设置慢查询时间为1秒 。 SET GLOBAL long_query_time = 1 然后重新连接才能生效 慢查询实践 如下面的查询语句,查过了1秒 然后打开慢查询日志 可以发现执行了6秒,实际上就是6秒。 然后使用explain explain的关键字段 当type为index或者All时,表示走的是全表扫描,这条sql是慢查询,需要优化 extra字段 extra中出现以下2项意味着MYSQL根本不能使用索引,效率会受到重大影响。应尽可能对此进行优化 解决方法: 修改sql或者尽量让sql走索引。 来源: https://www.cnblogs.com/linlf03/p/12233337.html

MYSQL调优实战

╄→гoц情女王★ 提交于 2020-01-25 18:33:41
一:基础数据准备 DROP TABLE IF EXISTS `tbl_user`; CREATE TABLE `tbl_user` ( `id` int ( 11 ) NOT NULL AUTO_INCREMENT, `username` varchar( 255 ) DEFAULT NULL, `email` varchar( 20 ) DEFAULT NULL, `age` tinyint( 4 ) DEFAULT NULL, `type` int ( 11 ) DEFAULT NULL, `create_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE =InnoDB AUTO_INCREMENT= 10 DEFAULT CHARSET= utf8; INSERT INTO `tbl_user` VALUES ( ' 1 ' , ' admin ' , ' admin@126.com ' , ' 18 ' , ' 1 ' , ' 2018-07-09 11:08:57 ' ), ( ' 2 ' , ' mengday ' , ' mengday@163.com ' , ' 31 ' , ' 2 ' , ' 2018-07-09 11:09:00 ' ), ( ' 3 ' , ' mengdee ' , '

mysql索引的使用

为君一笑 提交于 2020-01-25 18:11:24
什么是索引?为什么要建立索引?索引分类?索引的使用? 转载SQL(五) MySQL中的索引详讲 一、索引介绍:   索引用于快速找出在某个列中有一特定值的行。不使用索引,MySQL必须从第一条记录开始读完整个表,直到找出相关的行,表越大查询数据所花费的时间就越多。如果表中查询的列有索引,MySQL能够快速到达一个位置去搜索数据文件,而不必查看所有数据,那么将会节省很大一部分时间。   例如:有一张person表,其中有2W条记录,记录着2W个人的信息。有一个Phone的字段记录每个人的电话号码,现在想要查询出电话号码为xxxx的人的信息。   如果没有索引,那么将从表中第一条记录一条条往下遍历,直到找到该条信息为止。   如果有了索引,那么会将 Phone 字段,通过一定的方法进行存储,好让查询该字段上的信息时,能够快速找到对应的数据,而不必在遍历2W条数据了。其中MySQL中的索引的存储类型有两种:BTREE、HASH。 也就是用树或者Hash值来存储该字段,更详细的查找逻辑就需要会算法的知识了。我们现在只需要知道索引的作用,功能是什么就行。 二、索引优缺点: 优点:   1、所有的MySql列类型(字段类型)都可以被索引,也就是可以给任意字段设置索引。   2、大大加快数据的查询速度。 缺点:   1、创建索引和维护索引要耗费时间,并且随着数据量的增加所耗费的时间也会增加。  

MySQL深入学习(2)——InnoDB存储引擎

拈花ヽ惹草 提交于 2020-01-25 18:03:43
1. InnoDB存储引擎体系架构 innoDB的存储引擎主要体系结构如上图所示 首先是工作线程:默认7个后台线程,分别是4个io thread(insert buffer、log、read、write),1个master thread(优先级最高),1个锁(lock)监控线程,1个错误监控线程。可以通过show engine innodb status来查看。新版本已对默认的read thread和write thread分别增大到4个,可通过show variables like 'innodb_io_thread%'查看。 每个线程操作的同一个块大内存池:该内存池中会被分为多个区域,分别是缓冲池(buffer pool)、重做日志缓冲池(redo log buffer)以及额外的内存池(additional memory pool)。内存池所负责也就是维护线程需要访问的数据结构、缓存磁盘文件的数据,方便快速读取,同时在对磁盘文件的数据修改之前在这里缓存,以及重做日志缓存等。具体配置可由 show variables like 'innodb_buffer_pool_size' 、 show variables like 'innodb_log_buffer_size' 、 show variables like 'innodb_additional_mem_pool_size

面试常考的mysql知识点

混江龙づ霸主 提交于 2020-01-25 14:44:28
秋招之后,部门又来了好多小鲜肉,其中有部分同学是没有用过MySQL的,我把自己以前做过的笔记又重新整理了一番,希望能够对新同学有帮助! 什么是DML、DDL、DCL? DML (data manipulation language): 它们是SELECT、UPDATE、INSERT、DELETE,就象它的名字一样,这4条命令是 用来对数据库里的数据进行操作的语言 DDL (data definition language):主要的命令有CREATE、ALTER、DROP等, DDL主要是用在定义或改变表(TABLE)的结构,数据类型,表之间的链接和约束等初始化工作上,他们大多在建立表时使用 DCL (Data Control Language):是 数据库控制功能。 是用来设置或更改数据库用户或角色权限的语句,包括(grant,deny,revoke等)语句 。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行DCL TCL (Transaction Control Language): 事务控制语言 ,包括:set transaction\rollback\savepoin MySQL常用命令 DDL 创建数据库 create database 数据库名; 查看数据库列表 show databases;

翻译:Introduction to SQLSever Statistics SQL Server统计信息简介 Statistics and Execution Plans统计和执行计划 Statistics Maintenance统计维护

北城余情 提交于 2020-01-25 14:05:59
《Pro SQL Server Internals, 2nd edition》 的CHAPTER 3 Statistics中的Introduction to SQLSever Statistics SQL Server(P55~58)、Statistics and Execution Plans(P62~65)、 Statistics Maintenance(P68~69)三小节,Dmitri Korotkevitch,侵删 统计信息简介 SQL Server统计信息是系统对象,其中包含有关索引键值中的数据分布的信息,有时还包含常规列值。 可以在支持比较操作的任何数据类型上创建统计信息,例如>,<,=等。 让我们从上一章清单2-15中创建的dbo.Books表中检查IDX_BOOKS_ISBN索引统计信息。 您可以使用DBCC SHOW_STATISTICS('dbo.Books',IDX_BOOKS_ISBN)命令来完成此操作。 结果如图 3-1 所示。 图3-1. DBCC SHOW_STATISTICS输出 如您所见,DBCC SHOW_STATISTICS命令返回三个结果集。第一个包含有关统计信息的常规元数据信息,例如名称,更新日期,更新统计信息时索引中的行数等。第一个结果集中的“步骤”列指示直方图中的步数/值的数量(稍后将详细介绍)。查询优化程序不使用“密度”值

Mysql 索引概念,分类,使用技巧,优化分析总结介绍

拜拜、爱过 提交于 2020-01-25 14:05:19
文章目录 概念 有什么用? 分类 物理存储顺序 逻辑存储 数据类型 b+ tree 索引列 存储引擎支持 Innodb Myisam 使用技巧 建索引 用索引 优化分析 常见面试题 参考文章 概念 mysql index官方文档 索引是数据库管理系统中一种数据结构,用以协助快速查询数据库表中数据,典型的索引结构如B+ tree。 有什么用? MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车。 拿汉语字典的目录页(索引)打比方,我们可以按拼音、笔画、偏旁部首等排序的目录(索引)快速查找到需要的字。 分类 物理存储顺序 MySQL的 Innodb 存储引擎的索引分为聚集索引和非聚集索引(二级索引)。 聚集索引是Innodb引擎才有的概念。 为什么说是按照物理存储顺序分类呢?因为聚集索引的逻辑顺序就是数据记录的物理顺序,而非聚集索引却不是如此。 举个例子,聚集索引就像是汉语字典中的拼音索引,字典中的字就是按照这个顺序存的。非聚集索引就像是部首索引,相同偏旁的字在索引页上是相邻的,但是真实的位置却不一定是相邻的。类似的例子还有电话簿,大家自行想象一下。 聚集索引怎么选定呢? 第一个唯一且不能为NULL的列就会被选为聚集索引

有关SQL Server分布统计的问题

痞子三分冷 提交于 2020-01-25 13:59:42
最近常被一些人问到关于SQL Server中统计的问题,这些问题是: 是否需要关注数据库中统计的多少? 统计对象使用多个空间 就执行SQL语句来说,查询优化器使用索引或列的分布统计信息来选择最佳的策略或计划;如果缺少统计信息或统计信息过期,性能会受到影响。在回答这些问题前,需要介绍一些关于分布统计的背景知识:什么是分布统计、其重要性、如何创建、更新、显示或查询。 分布统计的定义 在介绍之前,不得不推荐的一些关于Holger Schmeling写的一系列关于统计的文章,强烈建议仔细阅读,我认为是最有价值的。 简单地说,统计(包含索引或列中的数据分布的一种映射或直方图)用于选取最好的查询执行计划;当系统正常时,你不必担心这些,这么说的原因是他们是自动创建的,随着数据的变化也保持自动更新,如果查询优化器‘编译’查询时,如果没有找到可用的统计来判断表或索引中的数据分布状态,数据库会在需要时自动创建一个,例如当你在WHERE子句中使用列过滤或在某列上进行DISTINCT操作时。 下面我们一起来看一下统计对象的直方图(Histogram),直方图主要衡量数据集中每一个非重复值的发生次数,查询优化器根据统计对象的第一个键列的值计算出一个直方图,通常一个直方图最多有200个值。 查看统计的详细信息,可以使用如下的命令: 1: DBCC SHOW_STATISTICS (Tab1, Stats