mysql中的索引有哪些

B-Tree索引,就是那种树形的,查东西快,还能按顺序排,适合各种匹配。
Hash索引,简单,就是哈希表,只认等值,速度快,但只能查等于,不能查范围。
Fulltext索引,文本搜索利器,文章评论找关键词,就靠它。
Spatial索引,空间数据专用,地图上找位置,这货行。

唯一索引,保证唯一,但可以有空值,防止重复数据。
主键索引,比唯一索引更特殊,不能有空值,默认就有。
外键索引,维护关系,保证数据一致。
组合索引,多个列一起,用最左边的列最有效。

选索引看查询,范围查选B-Tree,等值查可选Hash,全文搜索用Fulltext,空间数据用Spatial。
数据分布也要考虑,均匀的用B-Tree,唯一值多的好,唯一值少的别急。
大小和成本要权衡,太大影响缓存,太小影响查询。
不同存储引擎,InnoDB和MyISAM有区别,InnoDB的主键直接影响数据存储。

别建重复索引,别用函数操作,影响索引效果。
选对索引,性能提升不是梦。
你自己看,这些够用吗?

mysql索引类型,种类以及内部原理汇总

全文索引:适用于文本搜索,如文章,快速找关键词。

哈希索引:等值查询快,不支持范围,如商品ID查找。

B+树索引:常用,支持多种查询,如用户ID排序。

RTREE索引:空间数据,GIS应用,如地图定位。

聚集索引:数据行排序存储,如主键。

非聚集索引:指针指向数据行,如用户名搜索。

普通索引:加速查询,不保证唯一。

唯一索引:加速查询,保证唯一。

主键索引:唯一非空,加速查询。

组合索引:多列组合,加速复合查询。

回表:非聚集索引查后,需回表找完整数据。

索引覆盖:查询列全在索引中,无需回表。

你自己掂量。

Mysql索引一篇就够了

索引是数据库表中一列或多列的值排序结构,核心目的是提高查询效率。

1 . 聚集索引:表数据物理顺序与索引顺序一致,叶子节点存储数据行。
一个表只能有一个聚集索引。
例:MySQL InnoDB表使用主键创建聚集索引。

2 . 非聚集索引:表数据物理顺序与索引顺序无关,叶子节点存储索引值和数据行地址。
一个表可以有多个非聚集索引。
例:MySQL InnoDB表的非主键索引。

3 . 唯一索引:不允许索引列中有重复值(NULL除外,且一个NULL)。
例:UNIQUE INDEX idx_name (name)。

4 . 主键索引:唯一索引的特殊类型,自动创建于主键列。
一个表只能有一个主键索引。
例:PRIMARY KEY (id)。

5 . B+树索引:数据库普遍采用,非叶子节点存储键值和子节点指针,叶子节点通过链表连接。
例:MySQL InnoDB默认索引结构。

6 . HASH索引:通过哈希算法直接定位数据,查找时间复杂度O(1 )。
局限:无法排序/分组,仅支持精确查找。
例:Redis使用HASH索引。

7 . MyISAM:使用B+树结构,所有索引均为非聚集索引。
例:CREATE INDEX idx_name ON table_name。

8 . InnoDB:数据文件即索引文件,有且仅有一个聚集索引(基于主键)。
例:id INT PRIMARY KEY AUTO_INCREMENT。

建索引原则:
最左前缀匹配:例INDEX(a,b,c)支持a=1 AND b=2 ,不支持c>3
=和IN可乱序:例a=1 AND b=2 AND c=3 可任意顺序。

选择度高优先:例WHERE staff_id IN (1 ,2 ,3 )。

LIKE避免首字符%:例name LIKE '%abc'无法使用索引。

实操提醒:先分析执行计划,再添加索引。