架构优化和索引
1.数据类型
浮点:FLOAT和DOUBLE使用的是平台的浮点数,分别占用4字节和8字节。DECIMAL是表示精确的小数。
字符串:VARCHAR(255)表示最大长度255字节,对于uft-8编码,将不知道能保留多少字符,中文是3字节,字母1字节,这一点要注意。另外设高上限,因为内存的分配mysql是固定长度的,这样可能会导致内存的浪费。另外会占用额外的1或2字节来记录长度。该类型的问题是修改字段会改变行的大小,可能引起分页。带来额外的工作。但这个问题不是很大,因为预写式日志的存在。CHAR优势比较小了,对于固定长度的,倒是可以用一下,问题是会丢失字符串后面的空格。
时间:DATETIME其实是封装为YYYYMMDDHHMMSS的整数,8字节,相当与bigint,精确到秒
TIMESTAMP:从1970年1月1日到现在的秒数,占用4字节
BIT和SET,都是位集,要使用的时候研究一下跟使用INT有什么区别。
IP地址用无符号整数保存,mysql提供了INET_ATION()和INET_NTOA()实现转化,我这个项目刚好能用上。
2.索引
大部分存储引擎都是用B-Tree(一个节点很多分支,深度一样,为低速IO和按序查找而优化的)来实现。可以匹配全名,匹配最左前缀(找到第一层小于前缀的风格点和第一个大于前缀的风格点,递归)匹配范围值(找到第一层最大小于下届的和最小大于上界的,递归),like也可以看成一个范围值。比如 like ("123%" > "123" and <"124"). 这三种情况可以变成两种。可以组合比如,Key(a,b,c),索引中也是按顺序存储的, a='A'and b like 'B%',相当于abc like "AB%"可以索引 a='A' and b>"B1" and B<"B2" 相当于abc >"AB1" abc<"AB2"
like也可以看成一个范围值。对于多列索引,顺序很重要,如果前一列使用了范围条件,后一列的索引就不能使用了,因为mysql不知道这个范围里包括了多少值,无法组合出索引,所以这个时候In就特别有用,它可以是mysql知道如何组合条件使用索引。
如何select * form employee where gender>=0 and gender <=1 and birthday="1987-08-19",该表上有索引key(gender,birthday),这种写法会扫描全表,
而select * form employee where gender in (0,1) and birthday="1987-08-19"就会使用索引。这个其实优化器还可能优化,而如果gender是字符串,就无从优化了。
Hash索引不能处理范围检索。可以用索引一个保存hash值的列来优化索引的性能。
全文索引:通过分词,建立一个类似B-Tree的结构。
3.索引优化:
(1).有索引的列要单独出现在表达式的一边,这是最简单的,第二,表达式也最好不要有其他的变量,比如CURRENT_DATE,这个会影响缓存。(这个也许新的版本能优化)
(2).前缀索引,把字符串的前面一部分用做索引,Text字段会很需要,要关注选择性和平均性两个指标,语法alert table table_name add key (column_name(N)).
分享到:
相关推荐
高性能MySQL(一)优化服务器设置 高性能MySQL(二)操作系统和硬件优化 高性能MySQL(三)复制 高性能MySQL(四)可扩展的MySQL 高性能MySQL(五)MySQL分支与变种 高性能MySQL(六)高可用性
《高性能Mysql》第五章的读书笔记,记录的都是要点,以思维导图的方式呈现。
索引能够轻易将查询性能提高几个数量级,创建一个最优的索引经常需要重写查询。索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀。创建一个包含...
读书笔记,自己写的,方便以后网络查看。知识共享 11
高性能MySQL读书笔记MySQL概述于架构 1.1MySQL最重要、最与众不同的特性是它的存储引擎架构1.2。
记录了以下五大部分 一、grant用户授权 二、开启mysql bin-log日志 三、mysql主从复制 四、mysql分区技术,仅中mysql5.1之后的版本中支持。 五、mysql性能优化
周末重读了一遍《高性能MySQL》,发现有些知识点看过便忘了,没有实际动手操作一遍就是记不牢,所以今天动手操作了一下“找出谁持有锁”,并把实验步骤记录下来,有兴趣的网友可以参照一二。
本文档可以看作是 D瓜哥 学习《高性能MySQL》时,做的读书笔记。为了让内容更丰富易懂,还参考了《MySQL技术内幕》和《数据库索引设计与优化》。 本文档暂时只关注开发人员眼中的 MySQL。所以,内容暂时只覆盖...
阅读建议:无论你是MySQL数据的初学者,还是已经学习了MySQL,这本pdf都适合,新手用来学习,大佬用来查漏补缺,如果需要可以去阅读MySQL专栏的三篇学会MySQL系列,如果觉得写的不错,原创不易,多多支持呀
High-Performance-MySQL 《高性能MySQL》读书笔记
本文为《高性能MySQL》备份相关章节的读书笔记。 2、备份和恢复的简单定义 正如简介所说,备份人尽皆知,也很容易引起人的重视。根据需求写定期脚本,或者使用其他方式都是比较常见的。但是恢复就没有那么引人注目...
[三思笔记]全面学习MySQL+Proxy特性.pdf [三思笔记]全面学习oracle的flashback特性.pdf [三思笔记]全面学习Scheduler.pdf [三思笔记]全面学习分区表及分区索引.pdf [三思笔记]全面学习和应用ORACLE+ASM特性.pdf ...
一些问题 是否可以合法使用书籍?...阅读程序,使用进展常驻的swoole +高性能的yii2框架+关系型数据库MySQL5.7 +正在学习全文分布式检索引擎elasticsearch 2020年11月21日13:09:09现在已完成的功能: 前
算法&数据结构计算机网络操作系统Python基础Python基础教程python学习手册(第四版)Python进阶Python cookbookFluent Pythonpython核心编程(第三版)Python编程导论(第二版)Python框架Flask web开发数据库MongoDB权威...
数据太多时,最好别使用上句,会使DBMS降低检索和应用程序的性能。(*通配符) 2、对数据类型的列可进行运算(如加减乘除)。 3、对列起别名:有直接起别名,加AS起别名,用双引号起别名等三种方法 (单引号,引起...
java8 源码 becoming-programming-god 成为编程之神 1. 基础知识 (basic) 1.1 数据结构(data structure) ...读书笔记(comment) ...高性能mysqlss 3.8 Kafka权威指南 3.9 Http权威指南 3.10 Java8实战 3.11
Essential .NET 读书笔记 [第一部分] NET FrameWork的Collections支持 .NET的反射在软件设计上的应用 关于跨程序集的反射 实现C#和VB.net之间的相互转换 深入剖析ASP.NET组件设计]一书第三章关于ASP.NET运行原理讲述...