3.1索引创建的原则 ?

简介: 创建索引需遵循六大原则:针对大数据量、高频查询表;在查询、排序、分组字段建索引;优先高区分度列,可建唯一索引;varchar字段建议用前缀索引;多用联合索引且高区分度字段前置;避免过多索引影响维护效率。

必答内容:
好的,我们知道索引确实可以提高查询的效率,但前提是需要针对于数据库表创建合适的索引。创建索引的时候主要考虑一下几点原则:
1).针对于数据量较大,且查询比较繁琐的表创建索引。(单表超过10w记录)
2).针对于经常作为查询条件(where)、排序(orderby)、分组(group by)操作的字段建立素引。
3).尽星选择为区分度高的列建立索引,如果该字段是唯一的,建立唯一素引,效率更高。(区分度越高,效率越高)。
4).在varchar类型的字段上,建议指定索引长度(建立前缀素引),没必要对全字段建立索引,根据实际文本区分度决定素引长度就可以。
5).尽量建立联合素引,而且在联合素引中将区分度高的字段放在前面,减少单列素引。(查询时,联合素引很多时候可以素引覆盖,避免回表,提高效率)
6).在满足业务需求的前提下,建立适当的素引,索引不宜过多。(素引过多,会增加维护素引的成本,影响增制改的效率)
。可能会继续发问的问题:
1).索引的创建只是第一步,要想提高查询效率,还得正确的使用素引,避免素引失效,你知道素引失效的场景吗?【参照 3.2]
3.2 简单聊聊索引失效的场景 ?
·必答内容:
好的,素引失效这个问题,确实是在项目开发中非常常见的一类问题。那我就结合我之前的项目经验来聊一下,之前遇到的一些索引失效的场景:
第一类呢,就是在联合索引使用的时候,违反最左前缀法则,比如查询的条件并不是从索引最左边的列开始的。
第二类呢,就是范围查询(非等值查询)右侧的列,不能使用素引。
第二类呢,就是在索引列上进行运算或函数操作,索引将失效。非常典型的,像我们基于substring这样的函数载取字段值。
以及如果在条件匹配时,需要进行隐式类型转换的时候。比如:where gender=1,而gender是char类型这种字符串不加引号,虽然查也能查出来,但也会造成索引失效。
还有像常见的,以 %开头的like模糊匹配,索引也会失效。
当然这样的场景很多啊,上面这几个只是比较常见的索引失效的场景,所以在项目开发中,编写SQL时,就要避免这些情况的发生。
进阶内容:零
而对于索引是否生效,到底走哪个素引,以及具体SQL语句的执行性能到底怎么样。 这个我们可以借助于explain 来查看sql语句的执行计划,具体问题具体分析。
我们可以通过explain执行计划中的 key 来确定此次查询是否使用了索引,以及通过 type 来判定SQL的执行性能定要规避 type 为all全表扫描的情况,还有像 extra 的信息也需要关注一下。

相关文章
|
存储 固态存储 关系型数据库
下一代实时数据库:Apache Doris 【三】集群部署
下一代实时数据库:Apache Doris 【三】集群部署
447 0
|
1月前
|
数据采集 存储 数据库
爬取数据存入SQLite:轻量级数据库实战指南
本文介绍如何用Python爬取豆瓣电影Top250并存储至SQLite数据库。对比多种数据存储方案,突出SQLite轻量、高效、零配置的优势。涵盖环境搭建、代码实现、数据查询与导出、性能优化及反爬应对策略,适合中小规模爬虫项目快速开发与数据管理。(238字)
332 0
|
缓存 Linux 测试技术
安装【银河麒麟V10】linux系统--并挂载镜像
安装【银河麒麟V10】linux系统--并挂载镜像
6187 0
|
4月前
|
存储 JSON JavaScript
SimpleMindMap:一个强大的Web思维导图
在信息爆炸的时代,思维导图成为高效组织、记忆与表达复杂信息的关键技能。SimpleMindMap 是一个开源、强大的 Web 思维导图工具,支持多种图表结构、丰富的节点内容及自定义功能,提供在线使用与私有化部署选项,助力提升学习与工作效率。
265 0
|
6月前
|
存储 Android开发 虚拟化
机器码修改工具插件,软件机器码一键修改工具,可过任何检测【仅供学习】
本文档主要讲解了机器码组成原理、核心Hook技术实现及反检测策略。首先分析现代软件机器码检测涉及的硬件特征,如硬盘卷序列号、网卡MAC地址等
|
9月前
|
资源调度 JavaScript 前端开发
Pinia 如何在 Vue 3 项目中进行安装和配置?
Pinia 如何在 Vue 3 项目中进行安装和配置?
724 4
|
机器学习/深度学习 自然语言处理 物联网
Chronos: 将时间序列作为一种语言进行学习
Chronos框架预训练时间序列模型,将序列值转为Transformer模型的tokens。通过缩放、量化处理,模型在合成及公共数据集上训练,参数量20M至710M不等。优于传统和深度学习模型,展示出色零样本预测性能。使用分类交叉熵损失,支持多模态输出分布学习。数据增强策略包括TSMix和KernelSynth。实验显示大型Chronos模型在概率和点预测上超越多种基线,且微调小型模型表现优异。虽然推理速度较慢,但其通用性简化了预测流程。论文探讨了优化潜力和未来研究方向。
986 3
|
JavaScript 前端开发 开发者
Vue.js 2 项目实战(三):综合案例-小黑记事本
Vue.js 2 项目实战(三):综合案例-小黑记事本
|
网络协议 PHP
Wireshark常用过滤器表达式汇总
【7月更文挑战第6天】Wireshark 抓包和显示过滤器用于精确定位网络流量。
|
人工智能 JSON 计算机视觉
AI工具-标注工具labelme
Labelme是一款Python开源图像标注工具,支持图像分类、目标检测、语义分割和实例分割等任务。它提供了一个GUI界面,用户可绘制圆形、方形和多边形进行标注。安装通过`pip install labelme`和`lxml`,使用时可导入预定义标签列表。标注结果保存为json文件,包含类别、边界框信息和形状类型。Labelme还支持格式转换,如转换为VOC或COCO格式。这款工具对视频标注也兼容。5月更文挑战第9天
1507 5