当前位置: 首页 > news >正文

(六十四)设计索引的时候,我们一般要考虑哪些因素呢?(上)

本周我们将要讲解一下设计索引的时候,我们通常应该考虑哪些因素,给哪些字段建立索引,如何建立索引,建立好索引之后应该如何使用才是最合适的。

可能有的朋友会希望尽快更新后面的内容,但是因为工作的原因的确非常忙,也很少有周末时间,目前一周三更也是竭尽全力了,希望大家理解一下。

此外可以告诉大家的一个好消息是,下周开始将会开启为期两周的案例实战部分,也就是我们将会以一个电商平台的商品系统、交易系统以及营销系统的表结构设计以及索引设计作为案例背景,来告诉大家在实际的系统设计中,应该如何设计表结构以及索引。

接下来的这个案例将会包含商品表、商品详情表、订单表、物流表、退款表、购物车表、营销活动表,等多个表的设计,帮助大家在电商场景下去学习表结构的设计,以及针对具体的业务场景如何设计索引,这就跟我们最近学习的索引部分完全关联上了。

好了,那么接着就开始本周的索引设计一般原则的讲解吧。

首先,我们在针对业务需求建立好一张表的结构之后,就知道这个表有哪些字段,每个字段是什么类型的,会包含哪些数据

接着设计好表结构之后,接下来要做的,就是要设计表的索引,这个设计索引的时候,我们要考虑第一点,就是未来我们对表进行查询的时候,大概会如何来进行查询?

其实很多时候很多人可能说,你要让我刚设计完表结构就知道未来会怎么查询表,那我怎么可能知道呢,实在是想不出来!

好,那么没关系,此时我们完全可以在表结构设计完毕之后,先别急着设计索引,因为此时你根本不知道要怎么查询表。

接着我们就可以进入系统开发的环节,也就是说根据需求文档逐步逐步的把你的Java业务代码给写好,在写代码的过程中,现在一般我们都是用MyBatis作为数据持久层的框架的,你肯定会写很多的MyBatis的DAO和Mapper以及SQL吧?

那么当你系统差不多开发完毕了,功能都跑通了,此时你就可以来考虑如何建立索引了,因为你的系统里所有的MyBatis的SQL语句都已经写完了,你完全知道对每一张表会发起些什么样的查询语句,对吧?

那么这个时候,第一个索引设计原则就来了,针对你的SQL语句里的where条件、order by条件以及group by条件去设计索引

也就是说,你的where条件里要根据哪些字段来筛选数据?order by要根据哪些字段来排序?group by要根据哪些字段来分组聚合?

此时你就可以设计一个或者两三个联合索引,每一个联合索引都尽量去包含上你的where、order by、group by里的字段,接着你就要仔细审查每个SQL语句,是不是每个where、order by、group by后面跟的字段顺序,都是某个联合索引的最左侧字段开始的部分字段?

比如你有一个联合索引是INDEX(a,b,c),此时你一看发现有三个SQL,包含了where a=? and b=?,order by a,b,group by a这些部分,那么此时where、order by、group by后续跟的字段都是联合索引的最左侧开始的部分字段,这就可以了,说明你的每个SQL语句都会用上你的索引了。

所以在设计索引的时候,首先第一条,就是要按照这个原则,去保证你的每个SQL语句的where、order by和group by都可以用上索引。

http://www.lryc.cn/news/24933.html

相关文章:

  • 【蓝桥杯嵌入式】LCD屏的原理图解析与代码实现(第十三届省赛为例)——STM32
  • 论文学习——Reproducing Activation Function for Deep Learning
  • 【趣味学Python】Python基础语法讲解
  • 虚拟局域网VLAN的实现机制
  • Mask R-CNN 算法学习总结
  • Gorm -- 添加记录
  • go提高升阶(四) I/O流学习
  • 【代码随想录训练营】【Day28】第七章|回溯算法|93.复原IP地址|78.子集|90.子集II
  • Get请求和Post请求区别
  • static关键字
  • A Comprehensive Tool for Modeling CMOS Image-Sensor-Noise Performance论文总结及翻译
  • 嘀嗒出行再闯IPO:千军万马我无懈
  • MATLAB算法实战应用案例精讲-【优化算法】增强型鲸鱼优化算法(EWOA)(附matlab代码实现)
  • 登录Oracle数据库遇到ORA-01017密码错误的解决办法
  • 10个黑客基础教程!简单有效
  • JPA之实体之间的关系
  • 如何在 C++ 中调用 python 解析器来执行 python 代码(三)?
  • 【Linux】gcc/g++/gdb的使用
  • 浅浅谈一谈B树和B+树
  • Keil新建一个国民32位MCU工程
  • webpack.config.js与package.json文件的配置
  • 超详细Eclipse配置JDK
  • 成功解决numpy.linalg.LinAlgError: SVD did not converge in Linear Least Squares
  • Allegro如何设置铜皮避让的优先级操作指导
  • (Trie Tree)字典树
  • MQTT的学习之Mosquitto集群搭建
  • TS面向对象
  • Python进阶-----高阶函数map() 简介和使用
  • GPU会变得更便宜吗?GPU 定价更新
  • IDEA如何创建一个springboot项目