Welcome 微信登录

首页 / 数据库 / MySQL

MySQL下使用Inplace和Online方式创建索引的教程

MySQL下使用Inplace和Online方式创建索引的教程

MySQL各版本,对于add Index的处理方式是不同的,主要有三种:(1)Copy Table方式这是InnoDB最早支持的创建索引的方式。顾名思义,创建索引是通过临时表拷贝的方式实现的。新建一个带有新索引的临时表,将原表数据全部拷贝到临时表,然后Rename,完成创建索引的操作。这个方式创建索引,创建过程中,原表是可读的。但是会消耗一倍的存储空间。(2)Inplace方式这是原生MySQL 5.5,以及innodb_plugin中提供的创建索引的方式...
MySQL中InnoDB存储引擎的锁的基本使用教程

MySQL中InnoDB存储引擎的锁的基本使用教程

MyISAM和MEMORY采用表级锁(table-level locking)BDB采用页面锁(page-leve locking)或表级锁,默认为页面锁InnoDB支持行级锁(row-level locking)和表级锁,默认为行级锁各种锁特点表级锁:开销小,加锁快;不会出现死锁;锁定粒度大,发生冲突的概率最高,并发度最低行级锁:开销大,加锁慢;会出现死锁;锁定粒度最小,发生锁冲突的概率最低,并发度也最高页面锁:开销和加锁时间介于表锁和行锁之间;会出现死...
MySQL中二进制与重做日志文件的基本概念学习教程

MySQL中二进制与重做日志文件的基本概念学习教程

二进制日志二进制日志记录了所有对数据库执行更改的操作,二进制主要有以下两种作用:1、恢复(recovery)2、复制(replication)二进制日志的启动:配置参数log-bin[=name],如果不指定name,则默认二进制日志文件名为主机名,后缀名为二级制日志的序列号,所在路径为数据库所在目录。以index为后缀的文件为二进制日志的索引文件,用来存储过往生产的二进制日志。和二进制日志相关的参数:max_binlog_size、binlog_cach...
解决MySQL中的Slave延迟问题的基本教程

解决MySQL中的Slave延迟问题的基本教程

一、原因分析一般而言,slave相对master延迟较大,其根本原因就是slave上的复制线程没办法真正做到并发。简单说,在master上是并发模式(以InnoDB引擎为主)完成事务提交的,而在slave上,复制线程只有一个sql thread用于binlog的apply,所以难怪slave在高并发时会远落后master。ORACLE MySQL 5.6版本开始支持多线程复制,配置选项 slave_parallel_workers 即可实现在slave上多...
快速学习MySQL索引的入门超级教程

快速学习MySQL索引的入门超级教程

所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找。而用的最多,并且是mysql默认的就是二叉树算法 BTREE,通过BTREE算法建立索引的字段,比如扫描20行就能得到未使用BTREE前扫描了2^20行的结果,具体的实现方式后续本博客会出一个算法专题里面会有具体的分析讨论;Explain优化查询检测EXPLAIN可以帮助开发人员分析SQL问题,explain显示了mys...
MySQL中利用索引对数据进行排序的基础教程

MySQL中利用索引对数据进行排序的基础教程

MySQL中,有两种方式生成有序结果集:一是使用filesort,二是按索引顺序扫描。利用索引进行排序操作是非常快的,而且可以利用同一索引同时进行查找和排序操作。当索引的顺序与ORDER BY中的列顺序相同且所有的列是同一方向(全部升序或者全部降序)时,可以使用索引来排序。如果查询是连接多个表,仅当ORDER BY中的所有列都是第一个表的列时才会使用索引。其它情况都会使用filesort。MySQL索引通常是被用于提高WHERE条件的数据行匹配或者执行联结...
CentOS下重置MySQL的root密码的教程

CentOS下重置MySQL的root密码的教程

本人在CentOS6.4上安装万mysql后,无法通过root进入,因为安装的时候,并没有设置root密码,似乎有个初始随机密码,但是不记得了,太麻烦,直接重置root密码。首先,你必须要有操作系统的root权限了。要是连系统的root权限都没有的话,先考虑root系统再走下面的步骤。PS:赋予用于root权限方法一: 修改 /etc/sudoers 文件,找到%wheel一行,把前面的注释(#)去掉## Allows people in group wh...
MySQL中对于NULL值的理解和使用教程

MySQL中对于NULL值的理解和使用教程

NULL值的概念是造成SQL的新手的混淆的普遍原因,他们经常认为NULL是和一个空字符串""的一样的东西。不是这样的!例如,下列语句是完全不同的: mysql> INSERT INTO my_table (phone) VALUES (NULL); mysql> INSERT INTO my_table (phone) VALUES ("");两个语句把值插入到phone列,但是第一个插入一个NULL值而第二个插入一个空字符串。第一个的含义可以...
实现MySQL回滚的Python脚本的编写教程

实现MySQL回滚的Python脚本的编写教程

操作数据库时候难免会因为“大意”而误操作,需要快速恢复的话通过备份来恢复是不太可能的,因为需要还原和binlog差来恢复,等不了,很费时。这里先说明下因为Delete 操作的恢复方法:主要还是通过binlog来进行恢复,前提是binlog_format必须是Row格式,否则只能通过备份来恢复数据了。方法:条件:开启Binlog,Format为Row。步骤:1.通过MySQL自带工具mysqlbinlog 指定导出操作的记录:mysqlbinlog --no...
美团网技术团队分享的MySQL索引及慢查询优化教程

美团网技术团队分享的MySQL索引及慢查询优化教程

MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之...
Linux下将数据库从MySQL迁移到MariaDB的基础操作教程

Linux下将数据库从MySQL迁移到MariaDB的基础操作教程

自从2012年来,维基百科已经开始从MySQL迁移到MariaDB的过程,是维基媒体数据库架构变革的一个重大里程碑,将英文和德文版的维基百科数据库Wikidata移植到了MariaDB 5.5版本上。在过去几年中,维基百科一直使用 Facebook 的 MySQL 5.1 衍生版本 作为我们的产品数据库,构建版本号是r3753。我们很高兴该产品的性能表现,Facebook 有着全世界最棒的数据库工程师,他们为 MySQL 生态系统带去了很多改进。现在 Ma...
MySQL的线程池原理学习教程

MySQL的线程池原理学习教程

线程池是Mysql5.6的一个核心功能,对于服务器应用而言,无论是web应用服务还是DB服务,高并发请求始终是一个绕不开的话题。当有大量请求并发访问时,一定伴随着资源的不断创建和释放,导致资源利用率低,降低了服务质量。线程池是一种通用的技术,通过预先创建一定数量的线程,当有请求达到时,线程池分配一个线程提供服务,请求结束后,该线程又去服务其他请求。 通过这种方式,避免了线程和内存对象的频繁创建和释放,降低了服务端的并发度,减少了上下文切换和资源的竞争,提高...
MySQL中Innodb的事务隔离级别和锁的关系的讲解教程

MySQL中Innodb的事务隔离级别和锁的关系的讲解教程

前言:我们都知道事务的几种性质,数据库为了维护这些性质,尤其是一致性和隔离性,一般使用加锁这种方式。同时数据库又是个高并发的应用,同一时间会有大量的并发访问,如果加锁过度,会极大的降低并发处理能力。所以对于加锁的处理,可以说就是数据库对于事务处理的精髓所在。这里通过分析MySQL中InnoDB引擎的加锁机制,来抛砖引玉,让读者更好的理解,在事务处理中数据库到底做了什么。一次封锁or两段锁?因为有大量的并发访问,为了预防死锁,一般应用中推荐使用一次封锁法,就...
MySQL慢查询优化之慢查询日志分析的实例教程

MySQL慢查询优化之慢查询日志分析的实例教程

数据库响应慢问题最多的就是查询了。现在大部分数据库都提供了性能分析的帮助手段。例如Oracle中会帮你直接找出慢的语句,并且提供优化方案。在MySQL中就要自己开启慢日志记录加以分析(记录可以保存在表或者文件中,默认是保存在文件中,我们系统使用的就是默认方式)。先看看MySQL慢查询日志里面的记录长什么样的:Time Id CommandArgument# Time: 141010 9:33:57# User@Host: root[root] @ loca...
MySQL中基本的多表连接查询教程

MySQL中基本的多表连接查询教程

一、多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用"," 如: 由于其返回的结果为被连接的两个数据表的乘积,因此当有WHERE, ON或USING条件的时候一般不建议使用,因为当数据表项目太多的时候,会非常慢。一般使用LEFT [OUTER] JOIN或者RIGHT [OUTER] JOIN2. 内连接INNER JOIN 在MySQL中把ISELECT * FROM table1 C...
MySQL的查询缓存机制基本学习教程

MySQL的查询缓存机制基本学习教程

MySQL缓存机制简单的说就是缓存sql文本及查询结果,如果运行相同的sql,服务器直接从缓存中取到结果,而不需要再去解析和执行sql。如果表更改 了,那么使用这个表的所有缓冲查询将不再有效,查询缓存值的相关条目被清空。更改指的是表中任何数据或是结构的改变,包括INSERT、UPDATE、 DELETE、TRUNCATE、ALTER TABLE、DROP TABLE或DROP DATABASE等,也包括那些映射到改变了的表的使用MERGE表的查询。显然,这...
<< 1791 1792 1793 1794 1795 1796 1797 1798 1799 1800 >>