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)