什么是数据库表的索引和主索引

嘿,这件事听起来很复杂。
事实上,我以前在处理数据库时也遇到过陷阱。

我记得我刚接手一个旧系统,大概是2 008 年的时候,公司有一个电商项目,数据量已经相当大了,大概有几百G左右。
用户报告说查询速度非常慢,需要几分钟。
我检查的时候哦,表没有索引或者索引没有用好。

看,索引就像图书馆的目录。
没有索引。
如果你想找一本书,你就必须一本一本地读,对吗?有索引,翻几页目录就能找到你想要的书。

普通索引,我常用的。
您可以添加任何列,例如电子商务订单表中的 customer_id 列。
一个客户可以下多个订单,所以我这里添加一个普通的索引。
这样可以更快地检查特定客户的所有订单。
只需在订单上创建 CREATE INDEX idx_customer_id (customer_id); 即可。
这个东西允许重复,没有任何限制,非常有用。

主索引,这个你要小心。
您需要添加主键列,例如 order_id。
订单号不得重复。
这就是独特之处。
添加主键索引时,使用ALTER TABLE ADD PRIMARY KEY(order_id);订单。
这个东西查询起来是最快的,因为数据库直接知道主键是什么,可以快速查找。
但缺点是一旦添加,就被迫是唯一的。
以后数据操作需要注意不要有重复的order_id。
我有一个朋友在这里,他刚刚忘记了。
在添加数据时,他输入了重复的order_id,系统直接报错,造成了很大的混乱。

如您所见,索引不是随机添加的。
您需要知道何时使用普通索引以及何时使用主索引。
添加太多是有问题的。
例如,在旧系统中我给它添加了很多索引。
结果维护起来非常费力。
数据一更新,索引就得相应改变,CPU就满了。
我必须找到一个平衡点。

我从来没有接触过这方面的东西,比如分布式数据库的索引等等,还没有更正,所以不敢乱说。
但根据我的经验,不要把指数看得太简单。
只有多用、多总结,才能用好它。

如何正确合理的建立MYSQL数据库索引