全国旗舰校区

不同学习城市 同样授课品质

北京

深圳

上海

广州

郑州

大连

武汉

成都

西安

杭州

青岛

重庆

长沙

哈尔滨

南京

太原

沈阳

合肥

贵阳

济南

下一个校区
就在你家门口
+
当前位置:首页  >  技术干货

MySQL索引失效原理是什么?

发布时间:2023-10-13 02:07:43
发布人:xqq

一、MySQL索引失效原理

索引失效问题是面试必问问题,因为索引失效的情况比较多,很多同学记不住,面试的时候回答不好。我仔细研究了七七四十七天,设计了一句七字口诀,记住这句口诀,以后再遇到这个问题就可以拿满分了。

七字口诀就是:

模 型 数 空 运 最 快

口诀字面意思就是,要运送一个产品模型的话,要用空运,不要用陆运和海运,数空运非常快。叫做:模型数空运非常快。

下面我拆开逐字讲解一下:

:模糊查询的意思。like的模糊查询以%开头,索引失效。比如:

SELECT * FROM user WHERE name LIKE ‘%老猿’;

:代表数据类型。类型错误,如字段类型为varchar,where条件用number,索引也会失效。比如:

SELECT * FROM user WHERE height= 180;

height为varchar类型导致索引失效。

:是函数的意思。对索引的字段使用内部函数,索引也会失效。这种情况下应该建立基于函数的索引。比如:

SELECT * FROM user WHERE DATE(create_time) = ‘2020-09-03’;

create_time字段设置索引,那就无法使用函数,否则索引失效。

:是Null的意思。索引不存储空值,如果不限制索引列是not null,数据库会认为索引列有可能存在空值,所以不会按照索引进行计算。比如:

SELECT * FROM user WHERE address IS NULL不走索引。

SELECT * FROM user WHERE address IS NOT NULL;走索引。

建议大家这设计字段的时候,如果没有必要的要求必须为NULL,那么较好给个默认值空字符串,这可以解决很多后续的麻烦(切记)。

:是运算的意思。对索引列进行(+,-,*,/,!, !=, <>)等运算,会导致索引失效。比如:

SELECT * FROM user WHERE age – 1 = 20;

:是最左原则。在复合索引中索引列的顺序至关重要。如果不是按照索引的最左列开始查找,则无法使用索引。

:全表扫描更快的意思。如果数据库预计使用全表扫描要比使用索引快,则不使用索引。

延伸阅读:

二、双主架构实现方案

1、主备模式,两台MySQL互为主从,其中一台作为主节点对外提供服务,另外一台作为备机节点(standby),当提供服务的主节点发生故障后,将服务请求快速切换到备用节点,原主节点故障恢复后转换为备用节点(standby)。
2、主主模式,两台MySQL互为主从,且两台MySQL均作为主节点对外提供服务,当其中一台MySQL发生故障后,将指向该故障节点的请求快速切换到另外一台MySQL,原来指向非故障节点的请求不受影响。
在主主模式下,两个主库都提供读写服务,如果应用通过两个主库操作相同数据,则会发生冲突导致数据覆盖(使用语句模式复制)或复制异常(使用行模式复制),因此需要对读写服务进行控制:
1、基于自主主键控制,通过设置自增属性auto_increment_offset和auto_increment_increment来控制每个主节点生产不同的自增值,并根据不同自增值访问不同主节点。
2、基于库级别或表级别控制,如应用APP1访问节点node1上的DB1库,而应用APP2访问节点node2上的DB2库,两个主节点间不会操作相同表的数据,因此不会存在事务冲突。
为保证应用程序使用相同数据库连接配置而不受故障切换影响,常用方案有:
1、VIP,通过vrrpd或keepalived将VIP动态绑定到新主节点
2、域名,通过切换域名将域名指向新主节点
3、代理,通过更新代理中存放的路由信息来指向新主节点。

#it技术干货

相关文章

请问数据保存在txt文件中和数据库中相比有什么利弊啊?

请问数据保存在txt文件中和数据库中相比有什么利弊啊?

2023-10-13
人大金仓数据库是完全基于自研,是基于pc或是别的什么?

人大金仓数据库是完全基于自研,是基于pc或是别的什么?

2023-10-13
分库分表的数据库和分布式数据库有什么区别?

分库分表的数据库和分布式数据库有什么区别?

2023-10-13
如何用通俗易懂的方式解释多值依赖4nf和bcnf的区别?

如何用通俗易懂的方式解释多值依赖4nf和bcnf的区别?

2023-10-13

最新文章

常见网络安全面试题:Windows常用的命令有哪些?

常见网络安全面试题:Windows常用的命令有哪些?

2023-10-09
常见网络安全面试题:根据设备告警如何展开排查?

常见网络安全面试题:根据设备告警如何展开排查?

2023-10-09
常见网络安全面试题:mysql加固呢?(数据库加固)

常见网络安全面试题:mysql加固呢?(数据库加固)

2023-10-09
常见网络安全面试题:windows和linux加固?(操作系统加固)

常见网络安全面试题:windows和linux加固?(操作系统加固)

2023-10-09
在线咨询 免费试学 教程领取