mysql 表分区 怎么建立索引

记得有一次,我正在给一个数据库表添加索引,为了提高查询效率。
我打开MySQL命令行工具,准备给users表中的username字段添加一个唯一索引,防止出现重复的用户名。
输入了ALTER TABLE users ADD UNIQUE(username)后,突然想到,这个表里还有个email字段,也是需要唯一性的,不然容易有人用相同的邮箱注册。

我一边输入命令,一边自言自语:“等等,这个邮箱字段也应该是唯一的,得加上去。
” 就这样,我又在命令里加了一句ALTER TABLE users ADD UNIQUE(email)。

然后我又想到,有时候查询时还会用到id字段,这个字段已经是自增主键,自然有索引了。
但是,如果我想同时根据username和email来查找用户呢?这俩字段联合起来应该也能提高查询速度吧。
于是,我又尝试添加了一个多列索引:
ALTER TABLE users ADD INDEX idx_username_email(username, email)
执行完这些操作后,我看了看表结构,心里暗自庆幸:现在这个表的结构应该更健壮了。
不过,这些索引真的能让查询速度提升吗?还是说,它们只是增加了数据库的负担呢?

MySQL的索引都有哪些?

唯一索引:功能是保证数据唯一性,不是主要为了快查询。
例子:订单号设置为唯一索引。

普通索引:允许重复值,提高查询效率。
例子:用户表中的用户名设置普通索引。

主索引:通过PRIMARY关键字设置,确保唯一性和完整性。
例子:用户表中的id设置为PRIMARY KEY。

外键索引:关联不同表,保证数据一致性。
例子:订单表和用户表通过用户id设置外键索引。

复合索引:覆盖多列,提高复杂查询效率。
例子:订单表按用户id和订单时间设置INDEX(user_id, order_time)。

索引长度:限制索引长度优化性能。
例子:varchar字段设置INDEX(name(1 0))。

全文索引:适用于大量文本检索。
例子:文章表中的内容字段设置全文索引。
注意:InnoDB不支持全文索引。

实操提醒:根据查询场景选择合适的索引类型。

MySQL 常见索引类型介绍

MySQL索引类型总结: 1 . 主键索引:唯一,不允许NULL,InnoDB默认。
2 . 唯一索引:列值唯一,允许NULL,用于防止重复。
3 . 普通索引:无约束,提高查询速度。
4 . 空间索引:用于地理位置查询,GIS应用。
5 . 全文索引:文本搜索,如博客系统。
6 . 单列/多列索引:单列或多列组合。
7 . 前缀索引:减少索引大小,提高性能。
8 . 倒序索引:指定列排序,优化特定查询。
9 . 函数/表达式索引:对计算结果索引。
1 0. 不可见索引:控制索引可见性,MySQL 8 .0引入。