一两千万数据的表慢查询如何加快?
索引是帮助Mysql高效获取数据的排好序的数据结构
-
索引数据结构
- 二叉树:左边元素比右边元素小,这样就进行了事先排序,但是如果元素是第增,那就会退化成为链表,如果查询是最大的那么就需要遍历所有元素,所以不可以。被排除。
- 红黑树:弱平衡二叉树,自动将树旋转,这样保证树不会退化成为链表,但是树的高度在数据量极大的时候依旧会很高。被排除。
- B-Tree:优化红黑树,每个节点放入多个数据
- B+树:数据都储存到叶子节点,非叶子节点用来存放索引,叶子节点会有冗余。(应用占比99%)
Mysql 节点默认大小大小设置为16K,一个索引大小为8B(bigInt类型)硬盘位置指针大小为6B那么一个节点就可以存储16KB/(8B+6B)即1170个子节点,如果树的高度为3,那么就可以存储117011702这么多的数据
5.关于hash索引(有应用,但是应用较小)的问题:hash会有重复(但是mysql对此有优化,这不是主要原因),主要原因是范围查找会很慢(where col>6)
两种储存引擎(mysql表文件默认在安装目录的/data/文件夹下)
- MyISAM:叶子节点索引和数据所在指针值组成,数据储存在另外的文件中,每个表都有3个文件,.MYI 索引文件,.MYD数据文件,.frm 表结构文件
- InnoDB:叶子节点索引和数据组成,每个表都有2个文件,.MYID索引和数据数据文件,.frm 表结构文件,由于数据和索引放在一起,所以叫做聚集索引,并且为了组成B+树的数据结构,每张表必须有一个主键。