架构优化和索引
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》第三版中,你可以学到以下核心知识点: 1. **MySQL体系结构**:了解MySQL服务器的工作原理,包括存储引擎、查询处理、优化器和执行器等关键组件。 2. **性能优化**:学习如何通过索引策略、查询...
读书笔记:高性能MySQL阅读笔记
读书笔记:高性能mysql读书笔记
读书笔记:高性能Mysql 读书笔记
《高性能Mysql》第五章的读书笔记,记录的都是要点,以思维导图的方式呈现。
【高性能MySQL 第三版读书笔记 一至六】主要涵盖了MySQL服务器优化、操作系统和硬件优化、复制技术、可扩展性方案、MySQL分支与变种以及高可用性策略等多个方面。以下是对这些知识点的详细说明: 1. **优化服务器...
索引能够轻易将查询性能提高几个数量级,创建一个最优的索引经常需要重写查询。索引可以包含一个或多个列的值,如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效地使用索引的最左前缀。创建一个包含...
读书笔记:高性能mysql学习笔记
读书笔记:《高性能 MySQL》第三版学习笔记
读书笔记:高性能的mysql读书笔记
读书笔记:高性能MYSQL
读书笔记:《高性能MySQL》学习笔记
读书笔记:《高性能MySQL》《MySQL技术内幕InnoDB存储引擎》阅读笔记
读书笔记:高性能mysql中间件
读书笔记:学习《高性能MySQL》的笔记
读书笔记:高性能MySQL version 3 学习笔记
读书笔记:《高性能Mysql》(第三版) 学习笔记、摘要
读书笔记:ESRedisSentryKafka 高性能MySQL LVS
读书笔记:《高性能 MySQL 第三版》书中的代码整理
读书笔记,自己写的,方便以后网络查看。知识共享 11