![](https://img-blog.csdnimg.cn/20201014180756925.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
MySql
文章平均质量分 73
caomiao2006
这个作者很懒,什么都没留下…
展开
-
myisam压缩(前缀压缩)索引
myisam使用前缀压缩来减少索引的大小,从而让更多的索引可以放入内存中,默认只压缩字符串,但通过参数配置也可以对整数做压缩,myisam压缩每个索引块的方法是,先完全保存索引块中的第一个值,然后将其他值和第一个值进行比较得到相同前缀的字节数(长度)和剩余的不同后缀部分(即把相同部分去掉),把这部分存储起来即可(相同前缀长度和不同后缀部分字符串)。如:索引块中的第一个值是perform,第二个是p转载 2016-08-07 04:08:02 · 1532 阅读 · 0 评论 -
MySQL体系结构
了解MySql必须牢牢记住其体系结构图,Mysql是由SQL接口,解析器,优化器,缓存,存储引擎组成的 1 Connectors指的是不同语言中与SQL的交互 2 Management Serveices & Utilities: 系统管理和控制工具 3 Connection Pool: 连接池。管理缓冲用户连接,线程处理等需要缓存转载 2016-08-19 15:24:25 · 294 阅读 · 0 评论 -
MySQL InnoDB的存储结构总结
从物理意义上来讲,InnoDB表由共享表空间、日志文件组(redo文件组)、表结构定义文件组成。若将innodb_file_per_table设置为on,则系统将为每一个表单独的生成一个table_name.ibd的文件,在此文件中,存储与该表相关的数据、索引、表的内部数据字典信息。表结构文件则以.frm结尾,这与存储引擎无关。 以下为InnoDB的表空间结构图:转载 2016-08-19 15:25:07 · 1302 阅读 · 0 评论 -
MySQL体系结构以及各种文件类型学习汇总
1,mysql体系结构由数据库和数据库实例组成,是单进场多线程架构。数据库:物理操作系统文件或者其它文件的集合,在mysql中,数据库文件可以是frm、myd、myi、ibd等结尾的文件,当使用ndb存储引擎时候,不是os文件,是存放于内存中的文件。数据库实例:由数据库后台进程/线程以及一个共享内存区组成,共享内存可以被运行的后台进程/线程所共享。转载 2016-08-19 15:26:26 · 717 阅读 · 0 评论 -
MySQL优化—工欲善其事,必先利其器之EXPLAIN
最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器。最近我就打算了解下几个优化MySQL中经常用到的工具。今天就简单介绍下EXPLAIN。内容导航idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 环境准备MySQL版本:创建测试表CREA转载 2016-09-10 22:33:42 · 518 阅读 · 0 评论 -
Mysql技术内幕——InnoDB存储引擎
一.mysql体系结构和存储引擎1.1、数据库和实例的区别数据库:物理操作系统或其他形式文件类型的集合。在mysql下数据库文件可以是frm,myd,myi,ibd结尾的文件。 数据库实例:由数据库后台进程/线程以及一个共享内存区组成。数据库实例才是真正用来操作数据库文件的。 mysql数据库是单进程多线程的程序,与sql s转载 2016-09-04 17:11:30 · 942 阅读 · 0 评论 -
INNODB整体讲解
=========================1 内存结构 组成部分: 缓冲池 buffer pool, 由innodb_buffer_pool_size配置 重做日志缓冲池 redo log buffer, 由innodb_log_buffer_size配置 额外内存池 additional memory pool, 由innodb_additional转载 2016-09-04 17:13:02 · 2416 阅读 · 0 评论 -
MySQL的InnoDB索引原理详解(讲的很好)
本篇介绍下Mysql的InnoDB索引相关知识,从各种树到索引原理到存储的细节。InnoDB是Mysql的默认存储引擎(Mysql5.5.5之前是MyISAM,文档)。本着高效学习的目的,本篇以介绍InnoDB为主,少量涉及MyISAM作为对比。这篇文章是我在学习过程中总结完成的,内容主要来自书本和博客(参考文献会给出),过程中加入了一些自己的理解,描述不准确的地方烦请指出。转载 2016-09-04 17:15:11 · 2358 阅读 · 2 评论 -
MYSQL MVCC实现及其机制
多版本并发控制 Multiversion Concurrency Control 大部分的MySQL的存储 引擎,比如InnoDB,Falcon,以及PBXT并不是简简单单的使用行锁机制。它们都使用了行锁结合一种提高并发的技术,被称为MVCC(多版本并 发控制)。MVCC并不单单应用在MySQL中,其他的数据库如Oracle,PostgreSQL,以及其他数据库也使用这个技术。转载 2016-09-04 17:16:11 · 996 阅读 · 0 评论 -
MySQL配置
一、登录MySQL 要登录到MySQL只需要使用如下命令。mysql -h localhost -u root -plocalhost:IP地址;root:用户名;database:数据库名(可以省略,如果有,跟在-p后面); 如果你发现这样报mysql不是有效命令。那么有两种解决方法: 1、我的电脑-->属性-->高级-->环境变量-->系统变量转载 2016-08-19 15:23:48 · 430 阅读 · 0 评论 -
mysql使用存储过程返回多个值
可以使用OUT、INOUT参数类型让存储过程返回多个结果值,存储函数不能胜任,因为只能返回一个值。比如统计student数据表里男生和女生人数并通过它的参数返回这两个计数值,让调用者可以访问它们:[sql] view plain copydelimiter $$ create procedure count_students_by_sex(ou转载 2016-08-07 23:16:00 · 10268 阅读 · 2 评论 -
MySql存储过程之变量declare set
1、变量的定义在MySQL里面可以像我们写代码中一样定义变量来保持中间结果,看下面的格式:[sql] view plain copyDECLARE variable_name datatype(size) DEFAULT default_value; DECLARE相当于关键字,有点类似var,表示定义一个变量;然转载 2016-08-07 23:14:34 · 9572 阅读 · 1 评论 -
MySQL分组查询Group By实现原理详解
由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,在GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引。 在MySQL 中,GROUP BY 的实现同样有多种(三种)方式,其中有两种方式会利用现有的索转载 2016-08-07 05:03:09 · 16896 阅读 · 0 评论 -
《高性能MySQL》读书笔记--索引
索引(在MySQL中也叫做键),是存储引擎用于快速找到记录的一种数据结构。写在前面:索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点。考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储100条记录。如果没有索引,查询将对整个表进行扫描,最坏的情况下,如果所有数据页都不在内存,需要读取10^4个页面,如果这10^4个页面在磁盘上转载 2016-08-07 21:12:05 · 702 阅读 · 2 评论 -
mysql默认排序规则
今天遇到一个问题,有一个 Select 语句没有加 “Order By”,返回的数据是不确定的。这种问题碰到不止几次了。追根寻底, Select 语句如果不加 “Order By”, MySQL会怎么排序呢?* 不能依赖 MySQL 的默认排序* 如果你想排序,总是加上 Order By* GROUP BY 强加了 Order By (这与标准语法冲突,如果要避免,请使转载 2016-08-07 21:13:49 · 28502 阅读 · 6 评论 -
MySQL基本概念--索引&索引类型
索引是快速搜索的关键。MySQL索引的建立对于MySQL的高效运行是很重要的。下面介绍几种常见的MySQL索引类型。在数据库表中,对字段建立索引可以大大提高查询速度。假如我们创建了一个 mytable表:CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了转载 2016-08-07 21:15:32 · 478 阅读 · 4 评论 -
mysql索引合并:一条sql可以使用多个索引
mysql的索引合并并不是什么新特性。早在mysql5.0版本就已经实现。之所以还写这篇博文,是因为好多人还一直保留着一条sql语句只能使用一个索引的错误观念。本文会通过一些示例来说明如何使用索引合并。什么是索引合并下面我们看下mysql文档中对索引合并的说明:The Index Merge method is used to retrieve rows with severa转载 2016-08-07 21:16:56 · 18639 阅读 · 6 评论 -
MySQL 优化之 index merge(索引合并)
深入理解 index merge 是使用索引进行优化的重要基础之一。理解了 index merge 技术,我们才知道应该如何在表上建立索引。1. 为什么会有index merge我们的 where 中可能有多个条件(或者join)涉及到多个字段,它们之间进行 AND 或者 OR,那么此时就有可能会使用到 index merge 技术。index merge 技术如果简单的说,其实就转载 2016-08-07 22:24:07 · 3906 阅读 · 6 评论 -
Mysql几种索引方式的区别及适用情况
Mysql目前主要有以下几种索引方式:FULLTEXT,HASH,BTREE,RTREE。那么,这几种索引有什么功能和性能上的不同呢?FULLTEXT即为全文索引,目前只有MyISAM引擎支持。其可以在CREATE TABLE ,ALTER TABLE ,CREATE INDEX 使用,不过目前只有 CHAR、VARCHAR ,TEXT 列上可以创建全文索引。值得一转载 2016-08-07 22:28:27 · 4077 阅读 · 1 评论 -
MySQL中distinct和group by性能比较[转]
之前看了网上的一些测试,感觉不是很准确,今天亲自测试了一番。得出了结论(仅在个人计算机上测试,可能不全面,仅供参考)测试过程:准备一张测试表 1 CREATE TABLE `test_test` (2 `id` int(11) NOT NULL auto_increment,3 `num` int(11) NOT NULL default '0转载 2016-08-07 22:38:14 · 2221 阅读 · 3 评论 -
mysql的mvcc(多版本并发控制)
我们知道,mysql的innodb采用的是行锁,而且采用了多版本并发控制来提高读操作的性能。什么是多版本并发控制呢 ?其实就是在每一行记录的后面增加两个隐藏列,记录创建版本号和删除版本号,而每一个事务在启动的时候,都有一个唯一的递增的版本号。 1、在插入操作时 : 记录的创建版本号就是事务版本号。 比如我插入一条记录, 事务id 假设是1 ,那么记录如下:也就是说,转载 2016-09-04 17:16:41 · 433 阅读 · 0 评论 -
mysql next-key locking
在 InnoDB 的行级锁定上使用一个称作 next-key locking 算法。在 InnoDB 在搜索或扫描表的索引时将进行行锁,它将在所访问到的索引上设置共享或排它的锁定。因而行锁是更加精确地而又称为索引记录锁定。InnoDB 在索引记录上设置的锁同样会影响索引记录之前的“间隙(gap)”。如果一个用户对索引记录 R 加了一个共享或排它的锁定,那其它用户将不能在 R 之前立即插入新转载 2016-09-04 17:18:01 · 833 阅读 · 0 评论 -
MySQL不支持FULL JOIN, INTERSECT和MINUS(except)的替代方法
基本资料:mysql> select version();+-----------+| version() |+-----------+| 5.0.16 |+-----------+mysql> select * from t1;+----+------+| id | name |+----+------+| 1 | aa || 2 | bb |转载 2016-09-05 23:40:59 · 7990 阅读 · 0 评论 -
MySQ临时表和内存表的联系和区别
内存表,就是放在内存中的表,数据放在内存中,表结构定义放在磁盘中,所使用内存的大小可通过My.cnf中的max_heap_table_size指定,如max_heap_table_size=1024M。临时表也是存放在内存中,临时表最大所需内存需要通过tmp_table_size=1024M设定。 当数据超过临时表的最大值设定时,自动转为磁盘表,此时因需要进行IO操作,性能会大大下转载 2016-08-14 17:49:07 · 716 阅读 · 0 评论 -
临时表要舍磁盘临时表取内存临时表
【IT168 技术】临时表是系统采取某些作业时所需要用到的一些临时数据。根据其存储的形态不同,可以分为磁盘临时表和内存临时表。在系统参数中,有MAX_HEAP_SIZE和TMP_TABLE_SIZE两个参数来控制临时表的大小。当临时数据超过这两个参数的规定时,系统就会将内存临时表转换为磁盘临时表。这也就是说,磁盘临时表是内存临时表的一个替代品。 一、磁盘临时表与内存临时表的差异转载 2016-08-14 17:44:00 · 1260 阅读 · 0 评论 -
Mysql临时表
当你创建临时表的时候,你可以使用temporary关键字。如: create temporary table tmp_table(name varchar(10) not null,passwd char(6) not null)‘或 CREATE TEMPORARY TABLE IF NOT EXISTS sp_output_tmp ENGINE = MEMORYSELEC转载 2016-08-14 17:43:01 · 532 阅读 · 0 评论 -
innodb next-key lock解析
这里补充一些:(1)InnoDB默认加锁方式是next-key locking(2)在聚集索引中,如果主键有唯一性约束(unique,auto increment),next-key locking 会自动降级为record locking。(3)由于事务的隔离性和一致性要求,会对所有扫描到的record加锁。比如:update ... where/delete .. wh转载 2016-09-04 17:18:43 · 458 阅读 · 0 评论 -
SQL中inner join、outer join和cross join的区别
对于SQL中inner join、outer join和cross join的区别很多人不知道,我也是别人问起,才查找资料看了下,跟自己之前的认识差不多,如果你使用join连表,缺陷的情况下是inner join,另外,开发中使用的left join和right join属于outer join,另外outer join还包括full join.下面我通过图标让大家认识它们的区别。现有两张转载 2016-09-17 16:21:39 · 1035 阅读 · 0 评论 -
Mysql查询优化器
Mysql查询优化器本文的目的主要是通过告诉大家,查询优化器为我们做了那些工作,我们怎么做,才能使查询优化器对我们的sql进行优化,以及启示我们sql语句怎么写,才能更有效率。那么到底mysql到底能进行哪些优化那,下面通过以下几个方面来探讨一下:1 常量转化 它能够对sql语句中的常量进行转化,比如下面的表达式: WHERE col1 = col2转载 2016-08-14 15:31:18 · 1543 阅读 · 0 评论 -
MySQL优化—工欲善其事,必先利其器(2)
上一篇文章简单介绍了下EXPLAIN的用法,今天主要介绍以下几点内容:慢查询日志打开慢查询日志保存慢查询日志到表中慢查询日志分析Percona Toolkit介绍安装pt-query-digestpt-index-usagept-query-advisorSHOW PROFILEperformance_schema 慢查询日志转载 2016-08-14 15:32:50 · 894 阅读 · 0 评论 -
MySQL优化—工欲善其事,必先利其器之EXPLAIN
最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器。最近我就打算了解下几个优化MySQL中经常用到的工具。今天就简单介绍下EXPLAIN。内容导航idselect_typetabletypepossible_keyskeykey_lenrefrowsExtra 环境准备MySQL版本:创建测试表CREA转载 2016-08-14 15:34:32 · 495 阅读 · 0 评论 -
高性能MySql设计之查询优化(limit优化)
1 介绍1.1 处理流程当MYSQL 收到一条查询请求时,会首先通过关键字对SQL语句进行解析,生成一颗“解析树”,然后预处理器会校验“解析树”是否合法(主要校验数据列和表明是否存在,别名是否有歧义等),当“解析树”被认为合法后,查询优化器会对这颗“解析树”进行优化,并确定它认为最完美的执行计划。 1.2 衡量标准MYSQL查询转载 2016-08-14 15:37:38 · 6847 阅读 · 1 评论 -
MySQL5.6之Index Condition Pushdown(ICP,索引条件下推)
ICP(index condition pushdown)是mysql利用索引(二级索引)元组和筛字段在索引中的where条件从表中提取数据记录的一种优化操作。ICP的思想是:存储引擎在访问索引的时候检查筛选字段在索引中的where条件(pushed index condition,推送的索引条件),如果索引元组中的数据不满足推送的索引条件,那么就过滤掉该条数据记录。ICP(优化器)尽可能的把转载 2016-08-14 17:05:11 · 513 阅读 · 0 评论 -
学习MYSQL之ICP、MRR、BKA
Index Condition Pushdown(ICP)Index Condition Pushdown (ICP)是mysql使用索引从表中检索行数据的一种优化方式。ICP原理禁用ICP,存储引擎会通过遍历索引定位基表中的行,然后返回给MySQL Server层,再去为这些数据行进行WHERE后的条件的过滤。开启ICP,如果部分WHERE条件能使用索引中的字段,MySQL Se转载 2016-08-14 17:06:12 · 4364 阅读 · 0 评论 -
Mysql与Oracle区别
总结如下:1. Oracle是大型数据库而Mysql是中小型数据库,Oracle市场占有率达40%,Mysql只有20%左右,同时Mysql是开源的而Oracle价格非常高。2. Oracle支持大并发,大访问量,是OLTP最好的工具。3. 安装所用的空间差别也是很大的,Mysql安装完后才152M而Oracle有3G左右,且使用的时候Oracle占用特别大的内存空间和其他机器性能。转载 2014-08-28 23:51:33 · 614 阅读 · 0 评论 -
Mysql 建表用 MyISAM不用InnoDB(大数据高读取)
MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持已经外部键等高级数据库功能。两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用。 我作为使用MySQL的用户角度转载 2016-07-30 23:23:30 · 946 阅读 · 0 评论 -
MYSQL 浅谈MyISAM 存储引擎
思维导图 介绍 mysql中用的最多存储引擎就是innodb和myisam。做为Mysql的默认存储引擎,myisam值得我们学习一下,以下是我对《高性能MYSQL》书中提到的myisam的理解,请大家多多指教。 特点 > 不支持事务 证明如下: >> 表记录转载 2016-07-30 23:24:33 · 647 阅读 · 0 评论 -
InnoDB与MyISAM的六大区别(转)
这其实是09年总结的一篇文章,今天被一位朋友问到InnoDB有什么好处,一下子讲不清楚,现在把在自己另外一个博客的文章在这里重发一遍,主要是讲InnoDB和MyISAM的对比,从中可以看到InnoDB的很多好处,比如并发插入的时候行级锁等本 文主要整理了Mysql 两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料I转载 2016-07-30 23:26:04 · 410 阅读 · 0 评论 -
myisam和innodb索引实现的不同
MyISAM引擎使用B+Tree作为索引结构,叶节点的data域存放的是数据记录的地址。下图是MyISAM索引的原理图:这里设表一共有三列,假设我们以Col1为主键,则上图是一个MyISAM表的主索引(Primary key)示意。可以看出MyISAM的索引文件仅仅保存数据记录的地址。在MyISAM中,主索引和辅助索引(Secondary key)在结构上没转载 2016-07-30 23:27:17 · 333 阅读 · 0 评论 -
全文索引快的原因以及contains与like查找区别比较
1、中文分词器Chinese_vgram_lexer的属性mixed_case_ascii7可以用来设置是否要区分英文字母的大小写,默认是不区分大小写的,即你在查询中输入“T”还是“t”,都能查到字母t(T或是)。疑问:wordlist里的属性设置,似乎不起作用,无论对英文中文分词器。如,在中文分词器,模糊查询英文字母,必须以“%AB%”形式,中文的则不加%,加了结果还不对,不知道什么意思转载 2016-07-30 23:28:23 · 14897 阅读 · 1 评论