谈谈mysql索引实现-B+ Tree

    本文记录学习mysql索引时,了解到一系列知识点。先从二叉树,到平衡二叉树,再到多路平衡树(B-Tree),最后到加强版多路平衡查找树(B+Tree),也就是Mysql默认使用的索引结构。分别解析各自的优缺点。以及最后为什么Mysql选择B+Tree。最后总结对日常开发的影响。

阅读全文

SQL反模式17-可怜人的搜索引擎

目标:全文搜索

任何存储文本的应用都有针对某个字段进行查找的需求,随着数据增长,性能成为必经的瓶颈。
SQL的一个基本原理就是一列中的单个数据是原子性的,也就是说,你能对两个值进行比较,但通常是把两个值当成两个整体来比较。而你要在SQL中比较子字符串意味着低效和不准确。那么我们该如何高效的查找一个字符的子字符串呢?

阅读全文

SQL反模式16-随机选择

目的:获取随机样本记录

从一组数据中随机取几条。这样的需求太太平常了。我们通常把所有的数据读到程序中,由程序再取出随机的样例数据集。其实我们可以直接通过数据库查询拿出这样随机的样例数据。

阅读全文

自定义注解3-组合注解

    组合注解用处很多,只是我们有时没注意而已,比如RestController,PostMapping,GetMapping等。他们的意义在于将多个注解组合在一起,写一个注解就够了。

定义组合注解

    本节目的在于,组合Cacheable注解,将它的cacheNames写成默认的default(想想第一节最后的讨论)。

阅读全文

自定义注解2-动态修改注解的属性值

    经过上一节的,我们可以自己解析spel表达式。那么我现在的想法是,在注解的第一层aop中解析spel,然后将解析后的值设置到属性中,那么在之后的aop中就不用解析了。

找出注解中值存放位置

    继续上一节的代码,在上一节的AOP中添加注解@Order(0),再新增一个注解,添加@Order(1)。注意order这个注解有坑的,最好先百度完再使用。

阅读全文

自定义注解1-实现spel表达式

    开发中多多少少会使用spel,spel是Spring3引入了Spring表达式语言(Spring Expression Language,SpEL),在一些配置中,注解中经常用到,可谓是神器。比如说spring中的@Cacheable注解,其中key、unless等属性都支持Spel。举个例子:

阅读全文

SQL反模式15-模棱两可的分组

    假如你的老板想知道哪些项目还处于活跃状态,哪些项目已经停止了。他让你生成一个每个项目最后一个bug提交日期的报表。你查询根据product分组的dete_report的最大值,如下:

阅读全文

SQL反模式14-对未知的恐惧

    你的account表中有first_name, last_name两个字段,现在有需求要你显示一个完整名字。

product
1
2
select concat(first_name, last_name)
as 'full_name' from account

阅读全文

SQL反模式13-乱用索引

目的:优化性能

    改善性能最好的技术就是合理使用数据库中的索引。索引也是数据结构,他可以帮助快速定位到相应的行,而不需要野蛮的自上而下全表遍历。

阅读全文

SQL反模式12-幽灵文件

    在一次灾难中,你的服务器硬件机架整个倾倒,导致大量硬盘损坏,庆幸的是IT部分灾备做的比较好,你们有一份和上次备份一样的完整副本。但是在冒烟测试中你们发现所有的图片都不能加载,这是才想起来所有的文件都存在/var目录下。

目的:存储图片或其他媒体大文件

    本章的目标就是要存储这些图片并且将其和数据库实体管理起来,当查询这些实体时,我们需要确保同时能获取与其关联的图片。

阅读全文