01 2021 档案
摘要:本节内容总结自《High Performance MySQL》 高性能的索引策略 独立的列 查询时,最好不要对索引字段建立表达式,也不能将索引字段作为函数的参数,因为这会使索引失效,MySQL无法自动解析这种方程。 前缀索引和索引选择性 索引选择性 = 不重复的索引值 / 数据表的记录总数 T 前缀
阅读全文
摘要:本节内容总结自《High Performance MySQL》 索引基础 索引的概念 索引是存储引擎用于快速找到记录的一种数据结构。索引类似于一本书的目录部分,MySQL在利用索引查找的时候与其类似,其先在索引中找到对应值,然后根据匹配的索引记录找到对应的数据行。MySQL中索引可以包含一个或多个列
阅读全文
摘要:本节内容总结自《High Performance MySQL》 加快ALTER TABLE的操作速度 MySQL执行ALTER TABLE的原理 MySQL执行大部分修改表结构操作的方法是用一个新的结构创建一个空表,从旧表中查出所有数据插入新表,然后删除旧表,一般而言,大部分ALTER TABLE操
阅读全文
摘要:本节内容总结自《High Performance MySQL》 事务 概念 事务就是一组原子性的SQL查询,或者说是一个独立的工作单元。如果数据库引擎能够成功的对数据库应用该组查询的全部语句,那么就执行该查询,否则所有的语句都不会执行。综述:事务内的语句,要么全部执行成功,要么全部执行失败。 事务中
阅读全文
摘要:本节内容总结自《High Performance MySQL》 选择优化的数据类型 选择数据类型的方法 更小的通常更好:一般情况下尽量使用可以正确存储数据的最小数据类型。更小的通常更快,因为他们占用更少的磁盘,内存和CPU缓存。 简单就好:简单数据类型的操作通常需要更少的CPU周期。例如,整形比字符
阅读全文
摘要:> 本节内容总结自《High Performance MySQL》 设计MySQL应该注意以下几点: 1. 避免太多的列:MySQL的存储引擎API工作时需要在服务器层和存储引擎层之间通过行缓冲格式拷贝数据,然后在服务器层将缓冲内容解码成各个列。从行缓冲中将编码过的列转码成行数据结构的操作代价是非常
阅读全文
摘要:原题链接 思路:数组中仅有两个元素出现一次,其余元素均出现两次,也就是说所有元素异或的结果就等于这两个元素异或的结果,异或某一位结果为1说明在这一位这两个数字的位不同(一个为1,另一个为0),因此我们可以选择该不同的位作为划分,以这两个数字的不同位为基准,将数组中该位为1的划分到其中一个组中,为零的
阅读全文
摘要:原题链接 思路:本题最容易想的思路就是哈希表,第二种思路是使用位运算,由于只有一个数只出现了一次,其余数字都出现了三次,那么也就是说除去这个出现一次的数字以外,剩余的数字之和可以被三整除,同时,这些数字在二进制某一位上为1的个数也应该是三的倍数,如果某一位上 1的个数不是3的倍数说明那个只出现一次的
阅读全文
摘要:原题链接 思路:这题乍看上去好像是一个二分,其实上有更优的解法,由于从右上角往左下角看刚好是一颗二叉搜索树的形状,因此可以把这个二维数组看作是一个BST,因此解法就是BST的查找功能在此数组中的实现,将右上角元素看为根节点,从根节点开始,如果当前元素小于目标元素则找他的左子树,大于则找他右子树,否则
阅读全文
摘要:原题链接 思路:本题有点贪心算法的感觉,由题意可以确定的是卖一定在买之后,也就是说我们只需要任选一天作为中介,在它当天或它之前买入,在它当天或它之后卖出,这就是题意了。那如何下手呢,要求的是最大利润,计算公式就是卖价减去买价,也就是说卖价越高越好,买价越低越好,但是我们不知道以哪一天做为那个中介,因
阅读全文
摘要:原题链接 思路:题目不让用除法,类似于前缀和,我们很容易想到前缀积和后缀积,也就是说对于每一位数字,我们计算一个前缀积数组用来存放某个数字之前的数字之积,再用一个后缀数组保存这个数组中这个数后面数的乘积,之后前缀积和后缀积相乘即得解 1 public static int[] constructAr
阅读全文
摘要:原题链接 细节题,把题目读懂就能做得出来 附代码 1 public static int strToInt(String str) { 2 int begin = 0; // 记录刨除空格以外的第一个有效位 3 long ans = 0L; // 记录临时答案 4 char c = ' '; //
阅读全文