Skip to content
MySQL约 1 分钟0 个小节更新于 2026/06/19在线编辑

MySQl索引优化:

索引使用

在MySQL中,创建索引的基本命令是 CREATE INDEX。以下是创建索引的一般语法:

bash
CREATE INDEX index_name ON table_name (column_name[, ...]);

如果你想创建一个普通索引(非唯一索引),你只需指定索引名和基于哪些列创建索引

bash
CREATE INDEX idx_username ON users (username);

在这个例子中,idx_username 是索引的名字,users 是表的名字,username 是你要在其上创建索引的列名。

如果你想要创建一个唯一索引(不允许重复值的索引),可以使用 UNIQUE 关键字:

bash
CREATE UNIQUE INDEX idx_unique_email ON users (email);

另外,MySQL还支持创建部分索引(只对列的一部分进行索引)和前缀索引,例如:

bash
CREATE INDEX idx_user_lastname_prefix ON users (lastname(10));

在这个例子中,索引仅基于 lastname 列的前10个字符。

对于全文索引(适用于文本类型的列进行全文搜索),语法有所不同:

bash
CREATE FULLTEXT INDEX idx_fulltext_description ON products (description);

最后,如果要在已经存在的表上创建索引,也可以使用 ALTER TABLE 命令:

bash
ALTER TABLE table_name ADD INDEX index_name (column_name);

或者对于唯一索引:

bash
ALTER TABLE table_name ADD UNIQUE INDEX idx_unique_column (column_name);

索引设计原则

  • 在where字段中频繁出现,并且区分度高的字段添加索引
  • 为排序,分组,连接操作设计的字段创建索引
  • 限制索引的数量,删除不必要或冗余的索引应该被移除
  • 对于 BLOB、TEXT 和 VARCHAR 类型的列,大文本字段添加前缀索引,因为占用大量的存储空间,同时增加插入和更新时维护索引的成本,索引不在高效。
  • 在经常更新的列上避免使用索引,因为更新时索引要同步

选择索引类型

  • 常规的查询通常使用B+树索引(主键索引,唯一,普通索引)(Innodb)
  • 对于查找速度快并且数据重复少的字段可以考虑hash索引
  • 全文检索需求使用FULLTEXT索引。(MyISAM)
  • 空间索引地理位置存储R-tree(MyISAM)

以工程实践沉淀知识,以文档复盘成长。