CPU 过高的原因可能如下
2. 数据库表结构设计不合理,导致数据冗余或者碎片
3. 数据库参数配置不合理,导致缓存不足或者并发过高
4. 数据库服务器硬件资源不足,导致 CPU 负载过高
通常排查方法如下
1. 使用慢查询日志或者性能分析工具,找出执行时间长或者消耗资源多的查询语句,优化或者重写查询语句
2. 使用数据库优化工具,检查数据库表结构是否合理,是否有冗余或者碎片,进行数据清理或者重建索引
3. 使用数据库管理工具,检查数据库参数配置是否合理,是否符合数据库的实际需求,调整缓存大小或者并发限制
4. 使用系统监控工具,检查数据库服务器的硬件资源是否充足,是否有其他进程占用 CPU 资源,增加 CPU 核数或者关闭不必要的进程
索引的原理类似于书的目录结构,通过目录可以快速地定位到对应的章节,而不需要从头到尾翻阅每一页去查找。它会提前对设定的索引列进行排序和组织,形成一个类似于目录的结构,这样在查询的时候,利用二分法或其他算法,快速的检索到对应的数据,而不需要遍历整个表数据。
1. 当我们执行查询语句时,如果没有索引,数据库需要逐行扫描整个表格来找到符合条件的数据。而有了索引,数据库可以根据索引的有序性,快速定位到符合条件的数据,从而大大减少扫描的时间。
2. 当我们对数据进行排序或分组时,如果没有索引,数据库需要额外的操作来进行排序或分组,这导致了额外的时间开销。而有了索引,数据库可以直接利用索引的有序性,快速对数据进行排序或分组。
3. 数据库通常存储在磁盘中,而在执行查询语句时,数据库需要将磁盘中的数据加载到内存中进行处理。如果没有索引,数据库需要加载整个表格的数据,而有了索引,数据库只需要加载索引中的相关数据,从而减少了磁盘IO的次数和时间。
索引的本质是一个有序的指针集合,指向存储在磁盘上的数据。mysql 有很多类型的索引,每种索引也适用于不同的场景。
1.B-Tree 索引
使用B-Tree结构来存储键值对,其中键是索引列的值,值是指向数据行的指针。B-Tree索引可以支持范围查询、排序、分组等操作,但是对于非前缀匹配的查询效率较低。
2. Hash 索引
一种基于哈希表的索引类型,使用哈希函数将索引列的值映射到一个固定长度的哈希值,然后将哈希值和指针存储在哈希表中。Hash索引可以支持等值查询,查询速度很快,但是不能支持范围查询、排序、分组等操作,也不能利用索引缓存。
3. Full-Text 索引
是一种专门用于全文检索的索引类型,它使用倒排索引的方式来存储文本数据中的词语和出现位置。Full-Text索引可以支持模糊匹配、同义词、停用词等功能,适用于搜索引擎等应用场景。
建立索引原则
1. 在经常需要搜索的列上增加索引,比如 where 后面的条件,注意还要遵循最左原则
2. 在使用左外连接的列上建立索引
3. 高频查询的列,可以减少全表扫描的次数
4. 避免在频繁更新或删除的列上建立索引
5. 避免在大量重复值的列上创建索引
原创文章,作者:筱凯,如若转载,请注明出处:https://www.jingyueyun.com/ask/894.html