MySQL高级:explain分析SQL,索引失效&常见优化场景

SQL分析工具:解释中包含的字段分析解释:1.id:表示查询中执行的select子句或表操作的序号。
id有三种情况:-PRIMARY:最里面的子查询,最先执行-SUBQUERY:子查询,效率比上面的情况低-DERIVED:需要临时表,效率最低2.type:结果值从最好到最差:通常不会低于范围水平,最好参考。
-const:唯一索引,非关联查询。
-eq_ref,ref:eq_ref和const的区别在于前者是关联查询,后者是常规查询。
eq_ref和ref的区别在于后者不是查询;-uniqueindex-index、all:都是读取全表,区别是索引遍历读取索引树,全部从硬盘读取,会遍历全表,不建立索引。
3、possible_keys、key:possible_keys表示可以应用于表的索引,key表示实际使用的索引,key_len表示。
索引中使用的单词。
节数,长度越短越好。
-key_len:索引中使用的字节数。
在不损失准确性的情况下,长度越短越好。
4.ref:显示正在使用哪个索引列。
如果可能的话,这是一个常数。
如果id是索引且=号后面不跟常量,则显示id,即显示链表的相关字段。
5.rows:扫描的行数,通常较少。
更好-过滤:表中符合条件的记录数,占总记录数的百分比。
数量百分比6.附加:此列显示有关执行计划的其他附加信息。
优化您的索引使用。
具体索引使用情况的变化,可以参考&&索引设计原则。
索引失败的几种情况:1.最左前缀失败:-最左前缀要求我们不能跳梯子,否则索引会失败。
例如:最左边的名称前缀,状态和地址要求我们不能仅请求状态或地址。
-事实上,MySQL有一个Optimizer(查询优化器)。
查询优化器优化SQL并选择最佳的查询计划来执行。
2.范围查询后:-范围查询后索引字段将失效,但用于范围查询的索引字段本身仍然有效。
3、对索引字段进行操作:-对索引字段进行操作、使用函数等都会导致索引失败。
4.不要在字符串中添加'':-索引字段是字符串类型。
由于在查询时不会将单引号添加到字符串中,因此MySQL查询优化器将自动执行类型转换,从而使索引无效。
5、避免select*对覆盖索引的危害:-尝试使用覆盖索引(索引列完全包围查询列),减少select*,避免非索引项查询导致的退表,降低效率。
6.用or分隔的条件:-使用or分隔的条件,如果or之前的条件列有索引,但下一列没有索引,则不会使用涉及的索引。
7.像%开头的模糊查询:-可以关联Trie词汇树匹配。
解决方案。
使用覆盖索引。
只有当模糊查询中使用的条件字段和要查询的数据字段都在索引列中时,才可以使用索引。
8、MySQL认为全表更快:-MySQL的下层会自动判断,如果全表扫描更快,那么就直接使用全表扫描,不加索引。
如果表的索引列中的大部分数据不为空,则使用isnotnull时将使用该索引。
当使用isnull时,将不会使用索引(它不如全表扫描快)。
)并且将执行全表扫描;9.!=或<>:—使用不等式也会导致索引失败。
优化场景及SQL提示:1.准备一条加载命令,批量插入环境数据:-适当的设置可以提高导入效率。
例如,对于InnoDB表类型,有几种方法可以提高导入效率:顺序插入主键和禁用唯一性检查。
2、sort-in-order框架准备了两种排序方式:-usingindex:可以直接在索引列上执行查询,不需要返回表。
此时,需要确保所有请求的字段都是索引字段。
-usingfilesort:何时出现、何时优化以及两种扫描算法:两次扫描算法和一次扫描算法。
优化解决方案包括增加max_length_for_sort_data、减小查询字段的总体大小以及增加sort_buffer_size。
3.按组分组:-分组实际上执行排序操作,可以使用索引。
优化解决方案包括使用索引、禁用排序、优化子查询和使用连接优化。
4、优化OR条件:-OR。
在某些条件下进行优化,如果要使用索引,OR之间的每个条件列必须使用索引,不能使用复合索引,如果没有索引,则应考虑添加索引指数。
5.使用SQL提示。
SQL提示是数据库优化的重要工具,包括useindex、ignoreindex和forceindex。
6.优化页面限制:-使用正确的索引完成页面排序操作,并将其转换为特定位置的查询。
摘要:-我最喜欢全值匹配,并且必须尊重最左边的前缀;领先的兄弟不能死,中间的兄弟不能在索引列中分割成更小的值,并且范围之后的任何内容都将无效,例如百分比;写在右边,覆盖索引里不写星星。
如果没有值等于零,也有or,并且谨慎使用,如果索引无效,VAR报价不能丢失和扩展;SQL并不难!

mysql设置主键还要设置索引吗

不需要,主键有索引功能。

当创建或设置主键时,mysql会自动添加主键对应的唯一索引,不需要额外添加。

如果查询条件中没有使用主键,可以将查询字段设置为索引。
如果想在主键上放索引,主键就有索引的功能。

扩展信息:

注释

1主键必须是唯一索引,不一定是主键。

主键是可以唯一标识表中一行的一个属性或一组属性。
由于主键可以唯一标识一行记录,因此可以保证更新和删除数据时不会出现错误。
主键通常与外键形成参照完整性约束,以防止数据不一致。
数据库管理系统自动为主键生成唯一索引,因此主键也是唯一索引。

2一张表可以有多个唯一索引,但只能有一个主键。

3主键列不允许为空值,而唯一索引列允许为空值。

4主键也可以由多个字段组成复合主键,主键也是唯一索引。

5唯一索引是指索引值是唯一的,可以由一个或多个字段组成。

mysql索引添加失败原因分析及解决方案mysql不能添加索引

添加MySQL索引失败;论证分析和解索引是MySQL数据库中常见的优化方法。
可以降低查询的时间复杂度,提高查询效率。
然而,有时,添加标签时扩展程序会崩溃;您需要找到原因并解决它。
本文对MySQL索引冗余问题进行了详细的分析和介绍。
一、索引​​添加失败的原因1、MySQL数据库中索引名称重复或重复;如果插入标签时名称重复,迭代将会失败。
此时需要编辑索引名称并添加。
2、数据库访问权限不足MySQL数据库中的权限控制,保证数据安全有时插入索引的用户没有足够的权限,导致添加失败。
此时,您需要联系数据库管理员获取相关操作权限。
3、当表中数据过大时;当输入数字时,MySQL会执行大量计算并且耗时。
MySQL的默认配置又会失败。
此时,MySQL类似“innodb_sort_buffer_size”通过增加配置参数,可以增加排序使用的内存量。
4.MySQL中的索引字段类型;标签的字段类型必须与表中要插入的字段类型相匹配;否则安装时标签会被破坏。
例如,如果表中的字段名称为“col1”,字段类型为“varchar(20)”;如果添加的索引类型是整数类型。
添加将会失败。
此时需要重新设置标签类型或者修改表中的字段类型。
5、在MySQL数据库中复制唯一索引或主键索引;如果插入索引时唯一索引或主键索引的值遇到现有值。
扩展将会失败。
此时需要检查数据中是否有重复值并清理掉。
二、添加索引失败的解决办法1、修改索引名称,避免与现有索引名称重复或重复。
2、修改操作权限,联系数据库管理员获取相应的添加索引操作的操作权限。
3.增加MySQL的配置参数如`innodb_sort_buffer_size`增加MySQL的配置参数。
4.索引类型或修改表字段类型,使标签字段类型与表中的数据类型匹配。
或者修改表中的字段类型,使得索引能够成功插入。
5、去除重复值和重复数据,保证唯一索引或主键索引的值是唯一的。
3.总结本文详细介绍了MySQL索引冗余错误的原因和解决方案。
如果在实际开发过程中遇到添加标签失败的情况。
根据以上原因及解决办法即可分析解决。
通过优化MySQL数据库;可以提高数据库的效率和性能;可以为业务发展和数据安全提供有力保障。