索引类型
FULLTEXT
:- 用途:用于全文搜索,通常用于大型文本字段,如文章或博客。使用方法:在创建表时或之后,使用
FULLTEXT
关键字为字段或字段组合创建索引。
- 用途:用于全文搜索,通常用于大型文本字段,如文章或博客。使用方法:在创建表时或之后,使用
NORMAL
:- 用途:最常见的索引类型,适用于大多数搜索和排序操作。使用方法:默认情况下,如果不指定索引类型,创建的索引就是
NORMAL
。
- 用途:最常见的索引类型,适用于大多数搜索和排序操作。使用方法:默认情况下,如果不指定索引类型,创建的索引就是
SPATIAL
:- 用途:用于空间数据类型,如地理空间数据。使用方法:使用
SPATIAL
关键字创建空间索引。
- 用途:用于空间数据类型,如地理空间数据。使用方法:使用
UNIQUE
:- 用途:确保索引列中的所有值都是唯一的,常用于主键或唯一约束。使用方法:创建表时或在表创建后,使用
UNIQUE
关键字。
- 用途:确保索引列中的所有值都是唯一的,常用于主键或唯一约束。使用方法:创建表时或在表创建后,使用
索引方法
BTREE
:- 用途:最常用的索引方法,适用于等值和范围查询。使用方法:大多数MySQL存储引擎(如InnoDB和MyISAM)默认使用
BTREE
索引。
- 用途:最常用的索引方法,适用于等值和范围查询。使用方法:大多数MySQL存储引擎(如InnoDB和MyISAM)默认使用
HASH
:- 用途:通过散列函数快速定位键值,适用于等值查询,但不支持范围查询。使用方法:主要在MEMORY存储引擎中使用。
主要索引类型
- 普通索引(Normal): 这是最基本的索引类型,没有特殊限制。它允许被索引的列包含重复值和NULL值。普通索引主要用于提高查询效率。
- 唯一索引(Unique): 唯一索引保证索引列的每一行数据的唯一性。如果尝试插入重复的值,数据库将拒绝这些操作。唯一索引适用于需要强制数据唯一性的场景,如用户邮箱、身份证号等。
- 全文索引(Full Text): 全文索引适用于对文本内容进行搜索,特别是在处理大量文本数据时,如文章或评论内容。全文索引使用倒排索引技术,可以快速定位包含特定词汇的文档。
- 空间索引(Spatial): 空间索引用于空间数据类型,如地理信息系统中的地理位置数据。它允许进行空间位置查询和计算,如查找特定区域内的点或形状。
索引的存储方法
索引的存储方法决定了索引的物理结构和检索效率。常见的索引方法包括:
BTree
索引: B-Tree索引是最常用的索引结构,支持全键值、键值范围和键值排序的搜索。B-Tree索引适用于大多数场景,特别是需要范围查询的情况。Hash
索引: Hash索引基于哈希表实现,适用于等值比较查询,如使用”=”操作符。它的检索效率非常高,因为可以一次定位数据。但是,Hash索引不支持范围查询和排序操作。
索引的选择原则
在实际应用中,选择合适的索引对于优化数据库性能至关重要。以下是一些选择索引的基本原则:
- 选择具有唯一性的列作为索引,如主键或具有唯一约束的列。
- 为经常需要进行排序、分组或联合操作的列建立索引。
- 为常用作查询条件的列建立索引,以提高查询效率。
- 限制索引的数量,因为过多的索引会增加维护成本并降低写操作的性能。
- 使用数据量小的列作为索引,以减少索引的存储空间。
- 使用前缀索引来减少索引大小,特别是对于文本类型的列。
- 删除不再使用或很少使用的索引,以避免不必要的性能开销。
总结
FULLTEXT
和SPATIAL
索引类型有特定的使用场景,不要用于常规的数值或字符串比较。UNIQUE
索引可以保证列值的唯一性,但也可能降低插入和更新操作的性能。BTREE
索引适用于大多数场景,特别是当你需要进行范围查询时。HASH
索引适用于固定且经常查询的数据,但不适用于范围查询,因为它们不保持数据的排序,无法避免全表扫描!
ENGINE
不可以为MyISAM
,外键约束是InnoDB
存储引擎才有的特性,可以自行导出数据库查看是否符合。主表
和从表
,从表
中的某个字段需要收到主表中操作的影响,则需要在从表
创建外键而不是在主表
。