MySQL索引失效原理是什么

首页 / 常见问题 / 低代码开发 / MySQL索引失效原理是什么
作者:低代码工具 发布时间:05-15 09:44 浏览量:7103
logo
织信企业级低代码开发平台
提供表单、流程、仪表盘、API等功能,非IT用户可通过设计表单来收集数据,设计流程来进行业务协作,使用仪表盘来进行数据分析与展示,IT用户可通过API集成第三方系统平台数据。
免费试用

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

一、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、代理,通过更新代理中存放的路由信息来指向新主节点。

最后建议,企业在引入信息化系统初期,切记要合理有效地运用好工具,这样一来不仅可以让公司业务高效地运行,还能最大程度保证团队目标的达成。同时还能大幅缩短系统开发和部署的时间成本。特别是有特定需求功能需要定制化的企业,可以采用我们公司自研的企业级低代码平台织信Informat。 织信平台基于数据模型优先的设计理念,提供大量标准化的组件,内置AI助手、组件设计器、自动化(图形化编程)、脚本、工作流引擎(BPMN2.0)、自定义API、表单设计器、权限、仪表盘等功能,能帮助企业构建高度复杂核心的数字化系统。如ERP、MES、CRM、PLM、SCM、WMS、项目管理、流程管理等多个应用场景,全面助力企业落地国产化/信息化/数字化转型战略目标。 版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们微信:Informat_5 处理,核实后本网站将在24小时内删除。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系邮箱:hopper@cornerstone365.cn 处理,核实后本网站将在24小时内删除。

最近更新

很纠结,低代码平台还要不要继续研发?感觉这个行业很卷啊
07-11 17:22
盘点国内超好用的低代码平台:10款可视化工具深度评测(上)
07-10 17:55
低代码的局限性不包括哪些方面?一文为您详细解读
07-10 09:23
低代码组态编辑器究竟是什么?如何高效选择与应用?
07-10 09:23
低代码私有化部署是什么?如何助力企业实现高效数字化转型
07-10 09:23
低代码是谁提出来的:起源与未来发展全面解析
07-10 09:23
为什么选择低代码生成独立项目才是提升效率的关键?
07-10 09:23
低代码构建应用大全:如何选择合适的低代码开发平台?
07-10 09:23
低代码生成微信小程序:真能开启便捷开发之旅吗?
07-10 09:23

立即开启你的数字化管理

用心为每一位用户提供专业的数字化解决方案及业务咨询

  • 深圳市基石协作科技有限公司
  • 地址:深圳市南山区科发路8号金融基地1栋5F5
  • 手机:137-1379-6908
  • 邮箱:sales@cornerstone365.cn
  • 微信公众号二维码

© copyright 2019-2024. 织信INFORMAT 深圳市基石协作科技有限公司 版权所有 | 粤ICP备15078182号

前往Gitee仓库
微信公众号二维码
咨询织信数字化顾问获取最新资料
数字化咨询热线
137-1379-6908
申请预约演示
立即与行业专家交流