mysql优化和索引

  • 表的优化

1.定长与变长分离

如 int,char(4),time核心且常用字段,建成定长,放在一张表;

而varchar,text,blob这种变长字段适合单放一张表,用主键与核心表关联。

2.常用字段和不常用字段要分离

3.在 1 对多需要关联统计的字段上,添加冗余字段。

  • 列类型选择原则

1.字段类型优先级  整型 > date,time > enum,char > varchar > blob,text

2.够用就行,不要慷慨,大的字段浪费内存,影响速度。

3.尽量避免用NULL,NULL不利于索引,需要特殊的字节来标注。

  • Enum列的说明

1.enum列在内部是用整型来存储的

2.enum列和enum列想关联速度最快

3.enum列比(var)char的弱势--在碰到与char关联时,要转化,要花时间

4.优势---当char非常长时,enum依然是整型固定长度,当查询的数据量越大时。enum的优势越明显。

索引提高查询的速度、提高排序的速度、提高分组的速度

  • 聚簇索引和非聚簇索引

聚簇索引:btree

innodb引擎,索引和数据是在一块的,

innodb直接在主键索引的树中,储存行的数据,(既存储了主键值,又存储了行数据)。

innodb次索引指向对主键的引用。

优点:根据主键查询条目比较少时,不用回行(数据就在主键节点下)。

缺点:如果碰到不规则数据插入时,造成频繁的页分裂。

非聚簇索引:btree

myisam引擎, 索引和数据是分开的,

myisam索引指向行在磁盘上的位置

myisam中,主索引和次索引都指向物理行(磁盘位置)。

时间: 2024-10-09 02:51:31

mysql优化和索引的相关文章

mysql 优化之索引的使用

mysql 优化之索引的使用 1:MySQL 索引简介: MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 打个比方,如果合理的设计且使用索引的MySQL是一辆兰博基尼的话,那么没有设计和使用索引的MySQL就是一个人力三轮车. 拿汉语字典的目录页(索引)打比方,我们可以按拼音.笔画.偏旁部首等排序的目录(索引)快速查找到需要的字. 索引分单列索引和组合索引.单列索引,即一个索引只包含单个列,一个表可以有多个单列索引,但这不是组合索引.组合索引,即一

mysql优化之索引建立的规则

索引经常使用的数据结构为B+树.结构例如以下 如上图,是一颗b+树,关于b+树的定义能够參见B+树,这里仅仅说一些重点.浅蓝色的块我们称之为一个磁盘块,能够看到每一个磁盘块包括几个数据项(深蓝色所看到的)和指针(黄色所看到的),如磁盘块1包括数据项17和35.包括指针P1.P2.P3.P1表示小于17的磁盘块,P2表示在17和35之间的磁盘块,P3表示大于35的磁盘块.真实的数据存在于叶子节点即3.5.9.10.13.15.28.29.36.60.75.79.90.99. 非叶子节点仅仅不存储真

mysql优化之索引

Mysql优化之使用索引 1,索引简介 索引是单独一种数据结构,单独存在的一个空间.可以把数据表里的建立了索引的字段,进和物理地址,存在在一块,这块空间就是'索引'. 查询数据先从索引中查询,查询到之后,可以直接定位到物理地址,通过物理地址,直接找到真实数据.查询会更快速. 索引是一种 以空间换时间的一种方式,牺牲了空间和写的速度,提高了查询速度 2,准备演示数据表 这里以myisam引擎的数据库为例,我准备了一张1800000条数据的表,这张表存储时包含了三个文件,.Frm是表结构文件,.MY

mysql优化之索引优化

Posted by Money Talks on 2012/02/23 | 第一篇 序章第二篇 连接优化第三篇 索引优化第四篇 查询优化第五篇 到实战中去 索引优化 索引优化涉及到几个方面,包括了索引的类型.如何让查询使用索引,查询是索引算法的选择等等操作.(原文链接http://ddbiz.com/?p=961)涉及到数据库的查询时,大多数情况都是要建立索引的,MySQL的索引类型以及创建索引方式,可以参考其文档或者这里. 服务器参数设置 在于索引有关系的数据库参数中,有一些特别重要,如下:

MySQL优化之索引原理(二)

一,前言 ? 上一篇内容说到了MySQL存储引擎的相关内容,及数据类型的选择优化.下面再来说说索引的内容,包括对B-Tree和B+Tree两者的区别. 1.1,什么是索引 ? 索引是存储引擎用于快速找到记录的一种数据结构, 对性能的提升有很大的帮助,尤其当表中数量较大的情况下,索引正确的使用可以对性能提升几个数量级. 但是索引经常被忽略,不恰当的索引对性能可能还会带来负面效果. 1.2,什么时候添加索引 主键自动建立主键索引(唯一索引) where字句中的列,频繁作为查询字段的列 表连接关联的列

MySQL优化之——索引

转载请注明出处:http://blog.csdn.net/l1028386804/article/details/46591673 索引是在存储引擎中实现的,因此每种存储引擎的索引都不一定完全相同,并且每种存储引擎也不一定支持所有索引类型. 根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节. 大多数存储引擎有更高的限制.MYSQL中索引的存储类型有两种:BTREE和HASH,具体和表的存储引擎相关: MYISAM和InnoDB存储

【Mysql优化】索引覆盖

索引覆盖 是指 如果查询的列恰好是索引的一部分,那么查询只需要在索引文件上进行,不需要回行到磁盘再找数据.这种查询速度非常快,称为”索引覆盖”,比平时的查询少一次到磁盘读数据的操作.(索引正好覆盖到查询的数据) 例如下面: mysql> use exam9; Database changed mysql> desc options; +----------------+---------------+------+-----+---------+-------+ | Field | Type

MySQL优化--创建索引,以及怎样索引才会生效 (03)

1. 创建索引 (看这里) 2.索引在什么情况下才会起作用(重点)

MySQL优化GROUP BY-松散索引扫描与紧凑索引扫描

满足GROUP BY子句的最一般的方法是扫描整个表并创建一个新的临时表,表中每个组的所有行应为连续的,然后使用该临时表来找到组并应用累积函数(如果有).在某些情况中,MySQL能够做得更好,即通过索引访问而不用创建临时表. 为GROUP BY使用索引的最重要的前提条件是所有GROUP BY列引用同一索引的属性,并且索引按顺序保存其关键字.是否用索引访问来代替临时表的使用还取决于在查询中使用了哪部分索引.为该部分指定的条件,以及选择的累积函数. 由于GROUP BY 实际上也同样会进行排序操作,而