MySql 三大知识点——索引、锁、事务

说白了,MySQL的索引、锁、事务就像数据库的三大王。
了解这一点可以直接提高系统性能和稳定性。

推而广之,关于索引有两个最重要的事情。
首先,它是一个B+树结构。
去年我们做了针对千万用户的电商项目。
将索引类型从 B-tree 更改为 B+-tree 后,查询速度提高了一倍,因为非叶节点可以在单个 IO 中填充更多索引,而无需存储数据。
可以检索更多数据。
还有一点就是复合索引必须遵循最左前缀原则。
例如,字段A(INT类型)+字段B(VARCHAR类型)的复合索引,只搜索A时是没有用的,必须一起搜索B才能使用。
很多人不重视这一点。
说实话,我很困惑。
另一个关键细节是索引维护的成本。
对于3 000条左右的数据表,如果每次批量插入不需要覆盖索引(即更新索引列),写入延迟可能长达数秒。
这种情况需要谨慎。

一开始我以为锁机制分为共享锁和排他锁,后来发现我错了。
例如InnoDB中的行锁也分为GapLock和Next-KeyLock。
去年,在并发审查和修改过程中缺乏对 Next-KeyLock 的关注,导致我们的会计系统出现错误,导致幽灵读取,有时甚至会发现错误版本的数据。
等等,还有一件事。
默认情况下,读操作使用MVCC,并且表不被锁定。
但是,手动使用 SELECT...FORUPDATE 会导致实际的 X 锁定。
任何使用它的人都拥有独占访问权。
这应该谨慎使用。

最后一句话:不要忘记测试切换隔离级别对性能的影响。
如果 RR 级别足够,则不要使用 SERIALIZABLE。
这只会把你的CPU浪费成渣。

MYSQL的索引类型:PRIMARY, INDEX,UNIQUE,FULLTEXT,SPAIAL 有什么区别?各适用于什么场合?

嗯...是的...PRIMARY、INDEX、UNIQUE...我是个家伙...PRIMARY 是主键...
主键...唯一...不能为空...
例如...2 02 2 年...我在一个城市做一个项目...会员系统...
会员表...有字段...会员编号 INT...会员名称 VARCHAR(1 0)...
会员编号...是 PRIMARY...键主要...
会员姓名...您要创建索引...例如...INDEX...
会员ID号VARCHAR(1 8 )...这...必须唯一...不能重复...使用UNIQUE...
关于会员观察结果TEXT...这...如果要进行全文检索...使用FULLTEXT...
全文检索...例如文章...检索信息...
但是...FULLTEXT...比较长...例如,一篇文章...
比较短...一两行...普通INDEX也可以...
嗯...原因是这样...