鸣谢

当前位置:web集结号-mysql数据库
MySQL索引原理及慢查询优化 时间:2016-05-27 16:33:46 点击:138
MySQL凭借着出色的性能、低廉的成本、丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库。虽然性能出色,但所谓“好马配好鞍”,如何能够更好的使用它,已经成为开发工程师的必修课,我们经常会从职位描述上看到诸如“精通MySQL”、“SQL语句优化”、“了解数据库原理”等要求。我们知道一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,遇到最多的,也是最容易出问题的,还是一些复杂的查询操作,所以查询语句的优化显然是重中之重。本人从13年7月份起,一直在美团核心业务系统部做慢查询的优化工作,共计十余个系统,累计解决和积累了上百个慢查询案例。随着业务的复杂性提升,遇到的问题千奇百怪,五花八门,匪夷所思。本文旨在以开发工程师的角度来解释数据库索引的原理...
MySQL key_len 大小的计算 时间:2016-05-27 15:42:30 点击:93
实验证明: 变长字段需要额外的2个字节,固定长度字段不需要额外的字节。而null都需要1个字节的额外空间,所以以前有个说法:索引字段最好不要为NULL,因为NULL让统计更加复杂,并且需要额外一个字节的存储空间。这个结论在此得到了证实。key_len的长度计算公式: varchr(10)变长字段且允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL)+2(变长字段) varchr(10)变长字段且不允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)+2(变长字段) char(10)固定字段且允许NULL : 10*(Character Set:utf8=3,gbk=2,latin1=1)+1(NULL) char(10)固定字段...
mysqlbinlog回放数据 时间:2016-05-20 17:14:12 点击:245
mysqlbinlog支持下面的选项:---help,-? 显示帮助消息并退出。---database=db_name,-d db_name 只列出该数据库的条目(只用本地日志)。--force-read,-f 使用该选项,如果mysqlbinlog读它不能识别的二进制日志事件,它会打印警告,忽略该事件并继续。没有该选项,如果mysqlbinlog读到此类事件则停止。--hexdump,-H 在注释中显示日志的十六进制转储。该输出可以帮助复制过程中的调试。在MySQL 5.1.2中添加了该选项。--host=host_name,-h host_name 获取给定主机上的MySQL服务器的二进制日志。--local-load=path,-l pat 为指定目录中的LOAD DATA INFILE预处理本地临时文件。--offset=N,-o N 跳过...
mysql explain用法和结果的含义 时间:2016-05-20 15:32:13 点击:96
关于mysql 优化 explain 中 select_type、table 、 type 、 possible_keys 、 key 、 key_len 、 ref 、 rows 、 filtered 、 Extra 含义解释:idSELECT识别符。这是SELECT的查询序列号select_typeSELECT类型,可以为以下任何一种:SIMPLE:简单SELECT(不使用UNION或子查询)PRIMARY:最外面的SELECTUNION:UNION中的第二个或后面的SELECT语句DEPENDENT UNION:UNION中的第二个或后面的SELECT语句,取决于外面的查询UNION RESULT:UNION 的结果SUBQUERY:子查询中的第一个SELECTDEPENDENT SUBQUERY:子查询中的第一个SELECT,取决于外面的查询DERIVED:导出表的SELECT(...
MySQL优化的奇技淫巧之STRAIGHT_JOIN 时间:2016-05-20 14:15:57 点击:74
最近没怎么搞SQL优化,碰巧数据库被慢查询搞挂了,于是拿来练练手。问题通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下:SELECT post.* FROM post INNER JOIN post_tag ON post.id = post_tag.post_id WHERE post.status = 1 AND post_tag.tag_id = 123 ORDER BY post.created DESC LIMIT 100说明:因为post和tag是多对多的关系,所以存在一个关联表post_tag。试着用EXPLAIN查询一下SQL执行计划(篇幅所限,结果有删减):+----------+---------+-------+-----------------------------+ | table | key | r...
【MySQL】性能优化之 index merge 时间:2016-04-06 17:35:08 点击:74
MySQL 5.0 版本之前,每条个表在查询时 只能使用一个索引,有些不知道此功能限制的开发总是在一个表上创建很多单独列的索引,以便当where条件中含有这些列是能够走上索引。但是这样并不是一个好方法,或者是“好心办坏事”,索引能够提供查询速度,但是也能给日常维护和IUD 操作带来维护成本。MySQL 5.0 和之后的版本推出了一个新特性---索引合并优化(Index merge optimization),它让MySQL可以在查询中对一个表使用多个索引,对它们同时扫描,并且合并结果。Index merge的 限制MySQL在5.6.7之前,使用index merge有一个重要的前提条件:没有range可以使用。这个限制降低了MySQL index merge可以使用的场景。理想状态是同时评估成本后然后做出选择。因为这个限制,就有了下面这个已知的bad case :SELECT * FRO...
21 个 1/4 页 下一页  1  2   3   4