数据库技术
kobejayandy
十多年互联网产品研发经验,历经华为、腾讯、字节跳动等公司,主要从事后端技术研发及技术管理工作(andyjaykobe)
展开
-
InnoDB行格式对text/blob大变长字段的影响
1. InnoDB的Antelop与Barracuda文件格式Innodb存储引擎保存记录,是以行的形式存放的(与之对应的是像Google BigTable这种列数据库)。在InnoDB 1.0.x版本之前,InnoDB 存储引擎提供了 Compact 和 Redundant 两种格式来存放行记录数据,这也是目前使用最多的一种格式。Redundant 格式是为兼容之前版本而保留的。MySQ...转载 2019-03-23 22:55:17 · 613 阅读 · 0 评论 -
MySQL中常用日期时间函数
MySQL Date 函数下面的表格列出了 MySQL 中最重要的内建日期函数:函数描述NOW()返回当前的日期和时间CURDATE()返回当前的日期CURTIME()返回当前的时间DATE()提取日期或日期/时间表达式的日期部分EXTRACT()返回日期/时间按的单独部分DAT原创 2014-04-07 23:34:41 · 1089 阅读 · 0 评论 -
如何启动/停止/重启MySQL
启动、停止、重启 MySQL 是每个拥有独立主机的站长必须要撑握的操作,下面为大家简单介绍一下操作方法:一、启动方式1、使用 service 启动:service mysqld start2、使用 mysqld 脚本启动:/etc/inint.d/mysqld start3、使用 safe_mysqld 启动:safe_mysqld&二、停止1、使用转载 2014-04-05 17:34:11 · 679 阅读 · 0 评论 -
MySQL安全配置详解
MySQL 是一个真正的多用户、多线程SQL数据库服务器,它是一个客户机/服务器结构的实现。MySQL是现在流行的关系数据库中其中的一种,相比其它的数据库管理系统(DBMS)来说,MySQL具有小巧、功能齐全、查询迅捷等优点。MySQL 主要目标是快速、健壮和易用。目前,在大中型企业中已经得到了较好的运用,但是由于它是多平台的数据库,不可避免的默认配置也是适合多种情况的需求,因此需要用户需要在转载 2014-05-03 20:52:09 · 4011 阅读 · 0 评论 -
MySQL存储引擎MyISAM与InnoDB的主要区别对比
本文整理了Mysql 两大常用的存储引擎MyISAM,InnoDB的六大常见区别,来源于Mysql手册以及互联网的资料。InnoDB与Myisam的六大区别 MyISAMInnoDB构 成上的区别:每个MyISAM在磁盘上存储成三个文件。第一个 文件的名字以表的名字开始,扩展名指出文件类型。.frm文件存储表定义。数据文件转载 2014-05-03 23:14:11 · 878 阅读 · 0 评论 -
MySQL性能优化的最佳20+条经验
今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据库时(尤其是查表时的SQL语句),我们都需要注意数据操作的性能。这里,我们不会讲过多的SQL语句的优化,而只是针对MySQL这一Web应用最多的数据库。希望下面的这些优化技巧对你有用。1. 为转载 2014-01-19 21:46:00 · 1194 阅读 · 0 评论 -
MySQL中NULL与空字符串
一些刚刚接触MySQL的孩子,经常会错误的认为NULL与空字符串’ ’是相同的。这看似是一件不重要的事情,但是在MySQL中,这两者是完全不同的。NULL是指没有值,而”则表示值是存在的,只不过是个空值。对于SQL的新手,NULL值的概念常常会造成混淆,他们常认为NULL与MySQL空字符串是相同的事。情况并非如此。例如,下述语句是完全不同的:MySQL> INSERT INTO my_转载 2013-11-13 20:33:33 · 10690 阅读 · 0 评论 -
MySQL架构方案
Scale Out:横向扩展,增加处理节点提高整体处理能力Scale Up:纵向扩展,通过提升单个节点的处理能力达到提升整体处理能力的目的ReplicationMySQL的replication是异步的,适用于对数据实时性要求不是特别关键的场景。slave端的IO线程负责从master读取日志,SQL线程专门负责在slave端应用从master读过来的日志(早期MySQL用转载 2014-01-12 16:37:07 · 1449 阅读 · 2 评论 -
MySQL建议列属性尽量为NOT NULL
首先,我们要搞清楚“空值” 和 “NULL” 的概念:1、空值是不占用空间的2、MySQL中的NULL其实是占用空间的所谓的NULL就是什么都没有,连\0都没有,\0在字符串中是结束符,但是在物理内存是占空间的,等于一个字节,而NULL就是连这一个字节都没有。在数据库里是严格区分的,任何数跟NULL进行运算都是NULL, 判断值是否等于NULL,不能简单用=,而要用IS NULL关转载 2014-01-12 16:21:54 · 20064 阅读 · 0 评论 -
Oracle与MySQL的几点区别
Oracle数据库与MySQL数据库的区别是本文我们主要介绍的内容,希望能够对您有所帮助。1.组函数用法规则mysql中组函数在select语句中可以随意使用,但在oracle中如果查询语句中有组函数,那其他列名必须是组函数处理过的,或者是group by子句中的列否则报错eg:select name,count(money) from user;这个放在mysql中没有问题在or转载 2013-10-15 23:50:16 · 1490 阅读 · 0 评论 -
MySQL 数据库远程访问授权
MySQL远程访问,也就是通过ip访问MySQL服务,MySQL对于安全的要求是非常严格的,需要授权。 1.本地访问 Sql代码 GRANT ALL PRIVILEGES ON *.* TO admin@localhost IDENTIFIED BY 'admin' WITH GRANT OPTION; FLUSH PRIVILEGES;转载 2013-12-12 20:23:49 · 1999 阅读 · 0 评论 -
MySQLl修改表、字段、库的字符集
修改数据库字符集:ALTER DATABASE db_name DEFAULT CHARACTER SET character_name [COLLATE ...];把表默认的字符集和所有字符列(CHAR,VARCHAR,TEXT)改为新的字符集:ALTER TABLE tbl_name CONVERT TO CHARACTE转载 2013-12-12 19:52:01 · 1072 阅读 · 0 评论 -
MySQL中涉及的几个字符集
character-set-server/default-character-set:服务器字符集,默认情况下所采用的。character-set-database:数据库字符集。character-set-table:数据库表字符集。优先级依次增加。所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-转载 2013-12-12 21:02:19 · 835 阅读 · 0 评论 -
PRIMARY KEY、UNIQUE KEY、INDEX区别
MYSQL索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始 扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫 描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快10转载 2013-12-11 20:27:15 · 938 阅读 · 0 评论 -
谈谈MySQL乱码和set names
SET NAMES utf8相当于SET character_set_client = utf8 用来设置客户端送给MySQL服务器的数据的 字符集SET character_set_results = utf8 服务器返回查询结果时使用的字符集SET character_set_connection = utf8MySQL 服务器 把客户端传来的数据,从character_s转载 2013-12-11 20:17:10 · 1157 阅读 · 0 评论 -
MySQL中常用字符串函数
1.字符串长度函数CHAR_LENGTH(str),LENGTH(str) CHAR_LENGTH()返回值为字符串str的长度,长度的单位为字符。一个多字节字符算作一个单字符。对于一个包含五个二字节字符集,LENGTH() 返回值为 10, 而 CHAR_LENGTH() 的返回值为 5 select CHAR_LENGTH('你是'); --2 select LENGTH('你是'转载 2014-04-07 23:06:59 · 24598 阅读 · 0 评论 -
MySQL中DATETIME、DATE和TIMESTAMP的区别
首先 DATETIM和TIMESTAMP类型所占的存储空间不同,前者8个字节,后者4个字节,这样造成的后果是两者能表示的时间范围不同。前者范围为1000-01-01 00:00:00 ~ 9999-12-31 23:59:59,后者范围为1970-01-01 08:00:01到2038-01-19 11:14:07。所以可以看到TIMESTAMP支持的范围比DATATIME要小,容易出现超出的情况转载 2014-04-07 13:45:10 · 852 阅读 · 0 评论 -
分布式数据中间件TDDL、Amoeba、Cobar、MyCAT架构比较
框架比较TDDLAmoebaCobarMyCat点评TDDL不同于其它几款产品,并非独立的中间件,只能算作中间层,是以Jar包方式提供给应用调用。属于JDBC Shard的思想,网上也有很多其它类似产品。另外,网上有关于TDDL的图,如http://www.tuicool.com/articles/nmeu转载 2017-03-08 11:40:16 · 33236 阅读 · 4 评论 -
MySQL分区与传统的分库分表
传统的分库分表传统的分库分表都是通过应用层逻辑实现的,对于数据库层面来说,都是普通的表和库。分库分库的原因首先,在单台数据库服务器性能足够的情况下,分库对于数据库性能是没有影响的。在数据库存储上,database只起到一个namespace的作用。database中的表文件存储在一个以database名命名的文件夹中。比如下面的employees数据库:my转载 2017-01-31 16:28:04 · 4833 阅读 · 1 评论 -
MySQL 开发实践 8 问,你能 hold 住几个?
最近研发的项目对DB依赖比较重,梳理了这段时间使用MySQL遇到的8个比较具有代表性的问题,答案也比较偏自己的开发实践,没有DBA专业和深入,有出入的请使劲拍砖!…MySQL读写性能是多少,有哪些性能相关的配置参数?MySQL负载高时,如何找到是由哪些SQL引起的?如何针对具体的SQL做优化?SQL转载 2017-02-12 22:16:54 · 1086 阅读 · 0 评论 -
SQLServer JTDS 连接串格式
jTDS连接字符串格式(jTDS URL Format)jTDS连接字符串格式(URL Format):jdbc:jtds:://[:] [/] [;=[;...] ]其中,取值可以是'sqlserver'或'sybase'(各自的意义相当明显),为数据库服务监听端口(缺省情况下SQL Server为1433,Sybase为7100)*;为数据库名--JDBC术语:编目(cat转载 2015-07-21 11:00:11 · 3690 阅读 · 0 评论 -
Mysql JDBC 连接串参数说明
MySQL的 JDBC URL 格式 for Connector/J 如下例:jdbc:mysql://[host][,failoverhost...][:port]/[database] »[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...jdbc:mysql://[host:port]转载 2015-07-20 21:24:34 · 29952 阅读 · 4 评论 -
深入理解JDBC的超时设置
恰当的JDBC超时设置能够有效地减少服务失效的时间。本文将对数据库的各种超时设置及其设置方法做介绍。 真实案例:应用服务器在遭到DDos攻击后无法响应 在遭到DDos攻击后,整个服务都垮掉了。由于第四层交换机不堪重负,网络变得无法连接,从而导致业务系统也无法正常运转。安全组很快屏蔽了所有的DDos攻击,并恢复了网络,但业务系统却还是无法工作。通过分析系统的thread dump发现,业转载 2015-07-16 18:51:03 · 6551 阅读 · 0 评论 -
DBCP、C3P0、Proxool 、 BoneCP开源连接池的比较
简介 使用评价 项目主页 DBCPDBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序用使用可以设置最大和最小连接,连接等待时间等,基本功能都有,此连接池的持续运行的稳定性还是可以,不过速度稍慢,在大并发量的压力下稳定性有所下降,此外不提供连接池监控转载 2015-07-16 21:34:29 · 1601 阅读 · 0 评论 -
MySQL查看和修改最大连接数
使用 MySQL 数据库的站点,当访问连接数过多时,就会出现 "Too many connections" 的错误。出现这种错误有两种情况,一种是网站访问量实在太大,服务器已经负担不起,此时就应该考虑负载均衡或者其它减少服务器压力的办法。另一种情况就是 MySQL 的最大连接数设置得太小,当访问量稍大就出现连接过多的错误。MySQL 默认的最大连接数为 100,可以在 mysql 客户端使用以转载 2015-03-13 13:18:45 · 810 阅读 · 0 评论 -
MySQL数据库命令行下的数据备份与恢复命令
备份命令:mysqldump -u用户名 -p密码 -h服务器IP 数据库名 > 备份文件名例子:mysqldump -uroot -p123456 -h192.168.1.2 discuz > e:\backup\discuz.sql 还原命令:mysql -u用户名 -p密码 -h服务器IP 数据库名 例子:mysql -uroot -转载 2014-07-29 19:49:41 · 3719 阅读 · 0 评论 -
mysqldump导出某个表的部分数据
MySQLdump是MySQL自带的导出数据工具,通常我们用它来导出MySQL中,但是有时候我们需要导出MySQL数据库中某个表的部分数据,这时该怎么办呢?mysqldump命令中带有一个 --where/-w 参数,它用来设定数据导出的条件,使用方式和SQL查询命令中中的where基本上相同,有了它,我们就可以从数据库中导出你需要的那部分数据了。命令格式如下:mysqld转载 2014-07-29 19:39:19 · 1992 阅读 · 0 评论 -
MySQL UUID函数的详解
MySQL UUID函数的详解MySQL中可以有二类用于生成唯一值性质的工具:UUID()函数和自增序列,那么二者有何区别呢?我们就此对比下各自的特性及异同点:l 都可以实现生成唯一值的功能;l UUID是可以生成时间、空间上都独一无二的值;自增序列只能生成基于表内的唯一值,且需要搭配使其为唯一的主键或唯一索引;l 实现方式不一样,UUID是随机+规则转载 2014-07-06 20:43:36 · 1442 阅读 · 0 评论 -
MySQL数据库服务器逐渐变慢 该如何分析与解决
第一步 检查系统的状态通过操作系统的一些工具检查系统的状态,比如CPU、内存、交换、磁盘的利用率,根据经验或与系统正常时的状态相比对,有时系统表面上看起来看空闲,这也可能不是一个正常的状态,因为cpu可能正等待IO的完成。除此之外,还应观注那些占用系统资源(cpu、内存)的进程。1.1 使用sar来检查操作系统是否存在IO问题#sar -u 2 10 — 即每隔2秒检察一次转载 2014-07-05 23:12:54 · 1193 阅读 · 0 评论 -
MySQL 系统架构说明
一.逻辑模块组成总的来说,MySQL 可以看成是二层架构,第一层我们通常叫做SQL Layer,在MySQL 数据库系统处理底层数据之前的所有工作都是在这一层完成的,包括权限判断,sql 解析,执行计划优化,querycache 的处理等等;第二层就是存储引擎层,我们通常叫做Storage Engine Layer,也就是底层数据存取操作实现部分,由多种存储引擎共同组成。所以,可以用如下一转载 2014-05-12 23:35:57 · 959 阅读 · 0 评论 -
MySQL常用命令用法总结
1. mysqldump 命令的使用备份和导出数据库 mysqldump -h database_ip -u Username -p --opt databasename > backup-file.sql只导出数据库表结构 mysqldump -h database_ip -d -u Username -p databasename >database_structur转载 2014-05-18 16:19:26 · 996 阅读 · 0 评论 -
MySQL中ON DUPLICATE KEY UPDATE语法
如果在INSERT语句末尾指定了ON DUPLICATE KEY UPDATE,并且插入行后会导致在一个UNIQUE索引或PRIMARY KEY中出现重复值,则在出现重复值的行执行UPDATE;如果不会导致唯一值列重复的问题,则插入新行。例如,如果列 a 为 主键 或 拥有UNIQUE索引,并且包含值1,则以下两个语句具有相同的效果:1INSERTINTO转载 2013-12-09 14:14:38 · 811 阅读 · 0 评论 -
JDBC性能小贴
本文收集了一些用于提升JDBC性能的方法。Java应用或者JavaEE Web应用的性能是很重要的,尤其是数据库后端对应用的性能影响。不知你是否经历过Java、JavaEE web应用非常慢的案例没有(处理一个简单的请求都要花上好几秒的时间用于数据库访问,分页、排序等)。下面这些贴士也许能提升Java应用的性能。它们非常简单同时还可以应用于其它编程语言,如果是用数据库作为后端存储的话。这几转载 2013-11-25 23:50:02 · 780 阅读 · 0 评论 -
Oracle 索引介绍
1.1 索引的创建语法: CREATE UNIUQE | BITMAP INDEX . ON . ( | ASC | DESC, | ASC | DESC,...) TABLESPACE STORAGE LOGGING | NOLOGGING COMPUTE STATISTI转载 2013-06-27 21:17:13 · 758 阅读 · 0 评论 -
Oracle 的并发与多版本
DML语句包括:SELECT INSERT UPDATE DELETE MERGE 并发机制 Oracle的默认隔离级是快照(Snapshot),写入事务不会阻塞读取事务,读取事务可以获取当前已提交值。DB2默认是游标稳定性(Cursor Stability),写入事务会阻塞读取事务。Oracle对并发的支持不仅使用高效的锁定,还实现了一种多版本体系结构,它提供了一转载 2013-07-14 22:07:44 · 938 阅读 · 0 评论 -
SQL优化器简介
基于规则的优化器 。总是使用索引 。总是从驱动表开始(from子句最右边的表) 。只有在不可避免的情况下,才使用全表扫描 。任何索引都可以 基于成本的优化器 。需要表、索引的统计资料 Analyze table customer compute statistics; Analyze table customer estimate转载 2013-06-27 22:13:25 · 907 阅读 · 0 评论 -
Oracle索引优化
什么是索引 索引是建立在表的一列或多个列上的辅助对象,目的是加快访问表中的数据; Oracle存储索引的数据结构是B*树,位图索引也是如此,只不过是叶子节点不同B*数索引; 索引由根节点、分支节点和叶子节点组成,上级索引块包含下级索引块的索引数据,叶节点包含索引数据和确定行实际位置的rowid。索引的种类 非唯一索引(最常用) 唯一索引 位图转载 2013-06-27 21:54:55 · 887 阅读 · 0 评论 -
Oracle 分区表介绍
一. 分区表理论知识 Oracle提供了分区技术以支持VLDB(Very Large DataBase)。分区表通过对分区列的判断,把分区列不同的记录,放到不同的分区中。分区完全对应用透明。 Oracle的分区表可以包括多个分区,每个分区都是一个独立的段(SEGMENT),可以存放到不同的表空间中。查询时可以通过查询表来访问各个分区中的数据,也可以通过在查询时直接指转载 2013-06-27 22:52:26 · 854 阅读 · 0 评论 -
Oracle中组合索引的使用详解
在Oracle中可以创建组合索引,即同时包含两个或两个以上列的索引。在组合索引的使用方面,Oracle有以下特点: 1、 当使用基于规则的优化器(RBO)时,只有当组合索引的前导列出现在SQL语句的where子句中时,才会使用到该索引; 2、 在使用Oracle9i之前的基于成本的优化器(CBO)时, 只有当组合索引的前导列出现在SQL语句的where子句中时,才可能会使用到该转载 2013-06-27 22:44:13 · 819 阅读 · 0 评论 -
Oracle的悲观锁和乐观锁
为了得到最大的性能,一般数据库都有并发机制,不过带来的问题就是数据访问的冲突。为了解决这个问题,大多数数据库用的方法就是数据的锁定。数据的锁定分为两种方法,第一种叫做悲观锁,第二种叫做乐观锁。什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采取一种悲观的态度,也就是说假 设数据肯定会冲突,所以在数据开始读取的时候就把数据锁定住。而乐观锁就是认为数据一般情况下不会造成冲突,所以在数据进行提交更新转载 2013-06-24 23:33:03 · 1247 阅读 · 0 评论