MySQL
文章平均质量分 57
WEI_WB
这个作者很懒,什么都没留下…
展开
-
MySQL数据类型
MySQL 数据类型MySQL中定义数据字段的类型对你数据库的优化是非常重要的;MySQL支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型;整数类型Int(N)中N的涵义PS:定义了 init(5)zerofill 当和int(10)join时显示宽度对不上有可能出现临时表N表示显示宽度为N,但仍占4字节存储,存储范围不变;>create t原创 2016-04-20 16:49:35 · 362 阅读 · 0 评论 -
MySQL索引设计原则
设计原则低选择性的列不加索引,如性别;常用的字段放在前面;选择性高的字段放在前面;需要经常排序的字段,可加到索引中,列顺序和最常用的排序一致;对较长的字段数据类型优先考虑前缀索引如index(url(64));只创建需要的索引,避免冗余索引,如index(a,b)index(a)。MySQl索引的限制只支持B+tree,hash索引不支持bitmap;不支持表达式,原创 2016-03-07 17:15:56 · 391 阅读 · 0 评论 -
提高索引的检索效率
创建测试表create table mytab(id int(10) unsigned not nullauto_increment,c1 int(11) not null default 0,c2 int(10) unsigned default null,c5 int(10) unsigned not null default 0,c3 timestamp not nu原创 2016-03-07 17:01:20 · 671 阅读 · 0 评论 -
key_len计算规则
1) 索引字段的附加信息,可以分为变长和定长数据类型讨论,当索引字段为定长数据类型,比如说char int datetime,需要有是否为空的标记,这个标记需要占用1个字节对于变长数据类型,比如说:varchar,除了是否为空的标记外,还需要有长度的信息需要占用两个字节(备注:当字段类型定义为非空的时候,是否为空的标记将不占用字节)2) 同时还需要考虑表所使用的字符集,不同的字符集,gbk编码原创 2016-03-07 16:58:36 · 2004 阅读 · 0 评论 -
MySQL索引的类型
逻辑上:Single columindexes单列索引Combinedindexes,multiple-columnindex 多列索引Unique唯一索引Nonunique非唯一索引 物理上:Clusteredindex 聚集索引Not-clusterindex 非聚集索引Innodb会把显示定义的索引 定义为聚集索引 聚集索引和数据列的行存储顺序是一样原创 2016-03-07 16:33:10 · 356 阅读 · 0 评论 -
索引的优缺点
索引优点1. 加快数据检索效率2. 可以创建唯一性约束索引,保证数据库表中每一行数据的唯一性3. 加速表和表连接效率4. 在使用分组和排序子句进行数据检索时,可以显著减少查询中分组和排序的时间索引缺点1. 索引需要占用更多物理存储空间2. 当表中的数据进行增加,删除和修改的时候,索引也要更新维护,降原创 2016-03-07 16:31:51 · 472 阅读 · 0 评论 -
哈希索引和B+树索引的区别
逻辑区别hash算法立刻定位 对应的hash筒的关键字 b+数可能会做3次IO 最大4次IO 最小的话直接内存取出结果hash:1.只能等值查询不能排序2.hash碰撞3.不支持范围排序4.hash筒大了维护成本更大大数据的情况下b+索引比hash索引更高效hash索引可以一次性定位到结果 只能精确查找 索引大的话维护成本更大memory支持原创 2016-03-07 16:26:54 · 1656 阅读 · 0 评论 -
B+树索引算法
B+树是B树的变体,也是一种多路搜索树1.非叶子节点的子树指针与关键字个数相同;2.为所有叶子节点增加一个链指针;3.所有关键字都在叶子节点出现;B+树插入新元素时,可能会遇到3种情况Leaf page fullIndex page full操作NONO直接将记录插入叶节点原创 2016-03-07 15:23:10 · 1671 阅读 · 0 评论 -
Binary tree,二叉树
Binary tree二叉树Binary tree二叉树的每个节点至多只有二叉子树,二叉树的子树有左右有序之分,次序不能颠倒左边图非二叉树通过排序完成后变成了二叉树平衡树平衡二叉树具有以下性质:它是一棵空树或其左右两个子树的高度差的绝对值不超过1,且左右两个子树也是平衡二叉树不平衡树会通过自旋,变成平衡树平衡树和二叉查找树最大的区别:前者是平衡的后者未必原创 2016-03-07 15:09:04 · 230 阅读 · 0 评论 -
Binary search二分查找法
二分查找法,也叫折半查找法(折半搜索,二分查找算法,二分搜索),是一种在有序数组中查找某一特定搜索的算法这种搜索算法每一次比较都使搜索范围缩小一半二分查找法的优点是比较次数少,查找速度快,平均性能好,其缺点是要求待查表有序表,且插入删除困难,因此,折半查找方法适用于不经常变动而查找频繁的有序表 257912原创 2016-03-07 13:59:50 · 333 阅读 · 0 评论 -
MySQL事务特性,隔离级别
事务特性ACIDAtomic,原子:同一个事务里,要么都提交,要么都回滚;Consistency,一致性:即在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏;Isolation,隔离:并发事务间的行数据是彼此隔离的;Durability,持久:事务提交后,所有结果务必被持久化。 MySQL支持事务的存储引擎:Innodb,NDBcluster,TokuDMyS原创 2016-03-08 09:28:49 · 1577 阅读 · 0 评论 -
innodb锁(一)
INNODB的几种锁共享锁(S-LOCKING),允许一个事务去读一行,阻止其它事务获得相同数据集的排它锁排它锁(X-LOCKING),允许获得排它锁的事务更新数据,阻止其它事务取得相同数据集的共享读锁和排它锁INNODB还独有实现了2种锁意向共享锁(IS),事务打算给数据行加共享锁,事务在给一个数据行加共享锁前必须先取得该表的IS锁意向独占锁(IX),事务打算给数据行加排它锁原创 2016-03-08 14:57:21 · 436 阅读 · 0 评论 -
INNODB加锁分析处理(二)
Recordlock:单个记录上的锁,至少锁定一行记录;Gap lock(间隙锁),在索引记录间隙上的锁,或者是第一条索引记录之前,最后一条索引记录之后上的间隙锁(两条记录中间的缝隙) 锁定两个记录中间的缝隙;Next-keylock(下一键锁),索引记录锁以及索引记录之间的间隙锁,二者的组合锁;记录锁至少锁定一条记录(普通,主键,唯一 索引)或是无任何索引innodb会对rowid加原创 2016-03-10 17:33:01 · 1952 阅读 · 0 评论 -
二进制安装MySQL
一.下载MySQL官网下载MySQL 地址:http://www.mysql.com/downloads/ 点击社区版本MySQL选择MySQL版本选择操作系统点击Download下载MySQLPS:也可以通过wget下载wget http://dev.mysql.com/get/Downloads/MySQL原创 2016-01-27 16:34:15 · 503 阅读 · 0 评论 -
MySQL安装规范
系统安装规范A)硬件设置数据库服务器偶数盘组成raid 1+0,force wb策略(wb,write back 写cache 提交写入块给阵列卡的时候先写入cache层),数据库服务器最好双电,cache卡越大越好,可将所有cache都用于写缓存加速,关闭预读如果是ssd建议raid1(两块不同使用生命周期的盘,降低同时故障的概率)保证数据安全性(不同厂家也可以容量不一样也可以)原创 2016-04-19 14:53:03 · 609 阅读 · 0 评论 -
MySQL主流分支版本
MySQL是开源的数据库,这就意味着任何人能够在其源码的基础上分支出自己的版本主流分支版本Oracle MySQL(官方版本)Mariadb创始人monty创建,目标在于替换现有MySQL,也包含了percona的Xtradb tokudb的多种使用引擎,区别在aria引擎替换myisam,总体类似myisam(之后支持hash join thread pool 现在MySQL原创 2016-01-27 16:10:29 · 4274 阅读 · 1 评论 -
简单的主从配置
复制配置基本环境介绍MySQL版本:MySQL 5.6.27角色Ip:portServer-id必备条件Master192.168.247.11113308启用log-bin主库上创建复制用户Slave192.168.247.121原创 2016-02-15 17:09:48 · 242 阅读 · 0 评论 -
Innodb逻辑存储机制
Innodb的逻辑存储单元是由大到小分别是tablespace segment exetent page(block)组成表空间(tablespace)所有数据都存在表空间中,启用参数innodb_file_per_table,则每张表内的数据可以单独放到一个表空间中,每张表空间中存放的只是数据,索引和插入缓冲,其他类的数据,如undo信息,系统事务信息,二次写缓冲等还是存放在原创 2016-03-14 16:58:03 · 1335 阅读 · 0 评论 -
MySQL启动过程
分析启动过程加载配置文件检查权限加载表空间MySQL可以读取的配置文件--defaults-file 指定只读取该配置文件,不在读取其他配置文件--defaults-extra-file 指定mysqld在读取完指定的配置文件后,还需要读取用户指定的特殊的配置文件--print-defaults输出现在mysqld指定的参数--verbose --help #查看该原创 2016-02-05 17:32:47 · 461 阅读 · 0 评论 -
xtrabackup
xtrabackup的备份实现备份原理:利用innodb crash recovery恢复的步骤use-memory也可以使用到内存原创 2016-02-27 17:02:46 · 361 阅读 · 0 评论 -
MVCC
Innodb多版本实现机制:为了实现多版本,INNODB必须在表空间中保存行的旧版本信息,这些信息被保存在回滚段中;在内部,innodb为每个行增加两个域,1个6byte的域来指示最后插入或更新这个行的事务标识符(db_trx_id/trx id),删除标志也被认为是一个更新,因为它在提交前只是在行上做了个标记,另外一个7-byte的域被称为回滚段指针(db_roll_ptr/roll p原创 2016-03-11 15:16:08 · 374 阅读 · 0 评论 -
innodb锁(三)
Innode引擎监控的开启的方法 锁监控:打开innodb的锁监控:CREATE TABLE innodb_lock_monitor (a INT) ENGINE=INNODB; 5.6.16可以使用: --两个都需要打开set GLOBAL innodb_status_output=ON;set GLOBAL innodb_status_output_lock原创 2016-03-11 15:07:48 · 370 阅读 · 0 评论 -
MySQL存储引擎对比
引擎名特点使用建议myisam早期版本引擎,推表,在MariaDB用Aria替代用尽量少使用myisam对CPU内存利用率不高,并发支持不好memory以内存为存储介质,请求速度高,但数据不安全适用于数据安全要求不高的环境中,如:临时记数等Innodb支持原创 2016-03-07 11:28:19 · 300 阅读 · 0 评论 -
max_heap_table_size 和 tmp_table_size
max_heap_table_size:负责设置memory/heap表最大容量,不管其他引擎sql产生的临时表,如果内存不够用不允许写入新的数据,memory/heap表也不会转成磁盘表,会发出告警不允许写入磁盘数据tmp_table_size:执行sql过程中产生的临时表如果执行sql产生临时表,超过tmp_table_size/max_heap_table_size会产生基于磁盘的myi原创 2016-03-07 11:24:45 · 3062 阅读 · 0 评论 -
MySQL使用内存算法
MySQL使用总内存=global_buffer+thread_bufferthread buffer每个线程分配,会话级别的内存结构,分配高可能导致内存溢出导致OOMAll thread buffer(会话/线程级内存分配总和)=Max_threads(当前实际最大活跃连接数)*(read_buffer_size原创 2016-03-05 13:51:42 · 572 阅读 · 0 评论 -
MySQL体系结构
连接层:和客户端交互 对应主机的用户名密码 threadpoolSQL层:SQL解析 查询存储层: 内存数据的存储,数据的交互,NDB基于网络的集群原创 2016-03-05 12:09:12 · 223 阅读 · 0 评论 -
复制介绍
复制介绍MySQL复制在业界里有叫:MySQL同步,AB复制等,专业的名称就是叫:复制;复制是单向的,只能从Master复制到slave上;Slave上对于Master包含的数据不能进行写操作;一组复制结构中可以有多个slave,对于Master一般场景推荐只有一个;Master用户写入数据,生成event记到binary log中;Slave接收Master传来的binl原创 2016-02-15 14:17:06 · 229 阅读 · 0 评论 -
MySQL用户权限管理
核心开发权限权限列可以针对的级别DELETEDELETE_PRIVTABLESINSERTINSERT_PRIVTABLES OR COLUMNSSELECTSEELCT_PRIVTABLES OR COLUMNS原创 2016-02-14 15:37:52 · 248 阅读 · 0 评论 -
认识索引
索引及使用方法名词数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询,更新数据表中的数据;聚集索引,索引键值的逻辑顺序与索引所服务的表中相应的物理顺序相同的索引,反之为非聚集索引。索引的作用利用某查询会快很多(sql 语句中带where条件的都会用到索引);update和delete 都可以用到索引;update 通过调整索引可以让slave库的b原创 2016-02-14 10:04:17 · 227 阅读 · 0 评论 -
MySQL日志
错误日志error logmysql的重大的错误看日志error logshow variables like "%log_error%";+---------------------+--------------------------------------+| Variable_name | Value原创 2016-02-05 20:23:02 · 435 阅读 · 0 评论 -
MySQL存储引擎介绍
官方的存储引擎MyISAM Memory INNODB archive NDB引擎有什么区别1.是不是支持事务 不支持事务:MYISAM MEMORY ARCHIVE,支持事务INNODB NDB2.锁的粒度:INNODB,NDB 行级别锁3.ARCHIVE 只允许写 insert4.是不是索引组织表 cluster index table:innodb 支持4.是原创 2016-02-05 19:29:36 · 260 阅读 · 0 评论 -
MySQL多实例管理
创建多实例# ./scripts/mysql_install_db --user=mysql--defaults-file=/data/mysql/mysql_3307/my.cnf --datadir=/data/mysql/mysql_3307/data/# ./scripts/mysql_install_db --user=mysql--defaults-file=/data/m原创 2016-02-05 19:07:48 · 337 阅读 · 0 评论 -
丢失PID的原因
丢失PID可能原因 1.可能是/usr/local/mysql/data/rekfan.pid文件没有写的权限解决方法 :给予权限,执行 “chown -Rmysql:mysql /var/data” “chmod -R 755 /usr/local/mysql/data” 然后重新启动mysqld! 2.可能进程里已经存在mysql进程解决方法:用命令“ps -ef|grepm原创 2016-02-05 17:36:16 · 1157 阅读 · 0 评论 -
GTID
GTIDglobal transaction identifiers(全局事务标志);一个事务对应一个唯一ID,一个GTID在一个服务器上只会执行一次(一个事务在从库上只能出现一次);GTID是用来替代以前classic的复制方法;MySQL5.6.2支持 MySQL5.6.10后完善;GTID组成Server_uuid:GTID实际上是由UUID+TID组成的。其中U原创 2016-02-19 14:09:05 · 2270 阅读 · 0 评论 -
同步参数介绍
复制中的一些重要的参数 Log-binServer-idLog-bin-indexbinlog_formatbinlog_cache_sizemax_binlog_sizesync_binlogexpire_logs_dayslog_bin_trust_function_creators |原创 2016-02-19 15:57:11 · 683 阅读 · 0 评论 -
INNODB内存结构
INNODB内存结构如下图1. innodb_buffer_poolinnoDB高速缓冲对innodb很重要;innoDB不依赖OS,而自己缓存了所有数据,包括索引数据,行数据,等等,这点跟myisam有差别(myisam的数据依靠OS的pagecache进行缓存);应该把它设置大一些,建议设置为可用RAM的50%-80%;查询或更新需要对IBP加锁,影响并发;原创 2016-03-07 09:49:40 · 1246 阅读 · 0 评论 -
net_buffer_length
每个客户端连接时。用于维持连接缓冲,初始分配预设值,在有需要时,则会自动扩大到max_allowed_packet大小,然后在回收预设的net_buffer_length大小最小1k最大1m默认16kMysqldump时每个extended insert行长度不能超过net-buffer-length的值原创 2016-03-07 11:22:04 · 5791 阅读 · 0 评论 -
bulk_insert_buffer_size
专用于myisam引擎,用一个特别的类似的树形结构体缓存,用于提高 insertselect insert…values(…)(….)以及load data写数据到非空表的情景原创 2016-03-07 11:21:30 · 8891 阅读 · 0 评论 -
Binlog_cache_size
在事务过程中容纳二进制日志SQL语句缓存大小,二进制日志缓存是服务器支持事务存储引擎并且服务器启用了二进制日志(log-bin选项)的前提下为每个客户端分配的内存如果系统中经常会出现多语句事务的话,可以尝试增加该值的大小,以获得更好的性能当然,我们可以通过MySQL的以下两个状态变量判断当前binlog_cache_size的状况:binlog_cache_use和binlog_cache原创 2016-03-07 11:17:11 · 888 阅读 · 0 评论 -
join_buffer_size
应用经常会出现一些两表(或多表)join的操作需求,MySQL在完成某些join需求的时候(all row join/all index /scan join)为了减少参与join的“被驱动表”的读取次数以提高性能,需要使用到join buffer来协助完成join操作当join buffer太小,MySQL不会将该buffer存入磁盘文件而是先将join buffer中的结果与需求joi原创 2016-03-07 10:58:22 · 10041 阅读 · 0 评论