老于:“其实,创建索引,可以有下面几个原则。比如,字段数据具有唯一性,就得建索引;频繁作为WHERE查询条件或者GROUP BY ORDER BY的,也得建索引;多表连接,更得在连接字段上建索引;被DISTINCT修饰的字段,还得建索引”

阿松:“一句话,出镜率高或者筛选度高的字段就需要索引”

老于:“不错,所以我们也可以知道哪些情况不要建索引”

阿松:“让我来对照着捋一捋,字段数据没有唯一性,基本就是有限的几个数据,不要建;很少使用的字段,不要建。”

老于:“还有,如果表的数据量很小,那也不用建,想想小品上那句话‘你就捐几百块钱,人家就大车小辆来家里采访,你这都不够油钱’,如果一个字段的值被频繁修改,也不要建。”

阿松:“建,还是不建,这是个问题!”

老于:“还有一个问题就是,建了也白建,做了无用功”

阿松:“此话怎讲?”

老于:“索引会有失效的情况,假如我们给A建了索引,比如,用了表达式计算,写成了A+1=xxx,这种就失效,你得写成A=xxx-1;A上用了函数,比如SUBSTRING(A),也会失效;A LIKE ‘%t’也会失效;还有啊,索引字段和NULL NOT NULL做判断时,或者通过OR连接时,如果有一个字段没有加索引,所有字段索引都会失效。”

阿松:“别的都好理解,LIKE ‘%t%’为啥会失效,这个我原来经常用,匹配部分字符串太好用了”

老于:“你可以用查字典来想象,如果你要查T开头的字,直接翻开字典目录,找T开头的那一页索引就行了,但是如果你只知道你要查的字,中间有个拼音是T,你去哪一个索引页翻呢?只能从头开始一个个查了,索引就没用了。”

阿松:“原来如此”

老于:“第三步,就是加一层,缓存,比如Redis和Memcached作为缓存,这个例子很多,比如手机收到的验证码,就可以用Redis作为缓存,设置一个失效时间,在失效时间范围内,通过手机号和验证码在Redis里进行查找,找到了,就可以登陆了。”

阿松:“我说为啥手机验证码有个失效时间呢,原来就是缓存的时间”

老于:“第四步,就是架构的升级,采用主从架构,数据库拆分成主库和从库,主库接受写,从库接受读。当然这个具体操作起来就要考虑一致性问题了。”

阿松:“我估计,我们学校的选课系统加个缓存就够了,把校选的公共课放到缓存里,应对全校的高并发读,专业课可以不用,因为QPS小”

老于:“你啊,现在还是处于纸上谈兵的阶段,但是有这种思路还是对的。选课系统和排课系统优化的代价太高,不是因为难,而是优化后的收益小,因为它们只在一年内极短的时间内会有高QPS,这种属于就是你想干,也可能干不了的事情呦”

阿松:“你这老给我灌输什么思想,我可是要做架构师的男人。所以,我还是琢磨琢磨中午吃啥吧,下午再试。话说,老哥,你买菜了么?”

老于:“买了,一会儿外卖的就来了,话说,架构师先生,你想过数据库的并发访问机制么?这和取外卖有点像”

阿松:“我现在只想吃饭,吃饭时候你再给我讲吧,取个外卖都能有这么多事。。。”

阿松嘚嘚嘚-数据库篇4-查询优化不简单(下)相关推荐

  1. 阿松嘚嘚嘚-数据库篇3-查询优化不简单(上)

    话说阿松到了老于家里,新鲜劲果然没两天,就又开始咸鱼一样的生活了,天天葛优躺,可惜饭店不开门点不了外卖,不然就差小烧烤了. 这天,阿松学校说让在网上选课,阿松终于提起来了精神头,坐到了电脑前干点和自己 ...

  2. 阿松嘚嘚嘚-数据库篇2-完美范式不完美

    老于:"数据库市场对你来说太远了,我问你一个眼下的问题,如何设计一个表?" 阿松:"设计表,那还不容易,数据库三大范式,什么1NF\2NF\3NF\BCNF,直接上!&q ...

  3. 阿松嘚嘚嘚-数据库篇1-数据库市场有学问

    阿松,研一,24岁,曾经本科毕业后在某国企工作两年,而后考研成功. 老于,阿松的表哥,硕士毕业,工作三年,28岁,现任某一线城市互联网企业研发工程师,所在城市恰好是阿松上学的城市. 特殊时期,阿松在家 ...

  4. 2021最新Java面经整理 | 数据库篇(一)MySQL

    2021最新Java面经整理 | 数据库篇(一)MySQL 目录 一.基础 1.数据库范式 2.视图 3.游标 4.存储过程与函数 5.触发器 6.常用问题 二.事务 1.事务四大特性(ACID) 2 ...

  5. SQL性能优化中的底层概念,时间复杂度,算法和数据结构,数据库组成,查询优化和表关联原理.

    原文地址: http://blog.jobbole.com/100349/ 一提到关系型数据库,我禁不住想:有些东西被忽视了.关系型数据库无处不在,而且种类繁多,从小巧实用的 SQLite 到强大的 ...

  6. 未来软件是什么样呢?数据库篇(转载)

    观点3:数据库就是对象数组(Y10) 如果对<未来软件是什么样子?-数据库篇>中的观点1和观点2表示认同,那请让我们继续,否则就当我扯淡吧. 既然数据库都放在内存中了,那么我们索性把它作为 ...

  7. IOS开发数据库篇—SQLite模糊查询

    IOS开发数据库篇-SQLite模糊查询 一.示例 说明:本文简单示例了SQLite的模糊查询 1.新建一个继承自NSObject的模型 该类中的代码: 1 // 2 // YYPerson.h 3 ...

  8. 使用t-sql语句修改表中的某些数据及数据类型。_测试开发工程师数据库篇(一)...

    点击蓝字之后,我们就是好朋友了啦 15    数据库篇(一)  01事务概念及应用场景 事务是一组不可分割的mysql语句组,这些语句组要么全部执行成功,要么全部执行失败.事务的提出主要是为了解决并发 ...

  9. VBScript 教程之数据库篇

    VBScript 教程之数据库篇,以 vbscript DBHelper 类的方式,封装数据库连接.查询.基本的存储过程访问方法. option Explicit ' 数据库读取选项 Public C ...

最新文章

  1. 京东11.11大促背后,那些系统架构经历了些什么
  2. HNOI2019游记
  3. linux 进程通信比较,浅析Linux进程通信的几种方式及其比较
  4. MATLAB报错Invalid ADAPTORNAME specified. Type 'imaqhwinfo' for a list of available ADAPTORNAMEs. Image
  5. python期中考试知识点_大学期末考试,有哪些高效复习的技巧?
  6. Oracle对象被锁如何处理
  7. 接口加密了该怎么测?
  8. 分治法解决组合问题(递归)
  9. AE脚本-关键帧复制粘贴对齐镜像拉伸调节控制工具 Keystone
  10. iPhone5捣鼓mobile terminal
  11. 区块链100讲:如果连电子钱包都不懂,还谈什么区块链开发(有彩蛋)
  12. Unity3D项目之游戏场景小地图制作
  13. 【2019暑假】市中小学生游泳比赛-酱油记By Chavapa
  14. 中英文数据库检索策略对比
  15. 业务流程管理(BPM)系统的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
  16. 怎么把PS界面语言变成英文方法教程
  17. 如何使用SQL对数据进行分析和可视化
  18. 骁龙778g4g和5g区别
  19. Kafka消息积压案例分析
  20. 技术团队负责人应该具备怎样的能力

热门文章

  1. 如何在线文字转语音?
  2. 商务洽谈(谈判)步骤及技巧
  3. 手机投屏不是全屏怎么办_手机投屏怎样才能全屏
  4. Windows10的pin码有几位
  5. DDR3的学习笔记(一)
  6. go语言实现发送邮件带附件
  7. 苹果用 45 分钟,抽了整个行业仨嘴巴
  8. 适合全屏手机的高清壁纸,看这里!
  9. Linux使用shell定时任务实现ffmpeg视频转码和截图
  10. android10开发io接口,Android Things:外设I/O接口-GPIO