0%

MySQL 拿到一个查询请求后,会先看看之前有没有执行过这条语句,如果执行过,则直接从查询缓存中取之前查询的结果即可,但大多情况不建议使用 MySQL 的查询缓存,因为弊大于利

因为查询缓存的失效非常频繁,只要对一个表进行更新,那么这个表的所有查询缓存将会全部被清除,所以命中率并不会很好,除非你有一张静态的表,不会改变他的数据,或者很久才会更新一次。比如系统配置表,才适合使用这个查询缓存。

还有一个原因是因为,现在有 Redis, MemoryCache 等专门用来做缓存的应用,他们对缓存的处理会更优,而且 MySQL 服务器的资源通常都比较宝贵,所以不推荐使用 MySQL 的查询缓存。

查看查询缓存状态:

1
show variables like '%query_cache_type%';

显式指定使用查询缓存:

1
select SQL_CACHE * FROM user where ID = 10;

进行连接

使用数据库的第一步是连接,连接命令为:

1
mysql -u$username -h$host -P$port -p

然后输入密码就行了,不推荐在 -p 的后面输入密码,会有安全问题。

阅读全文 »

在项目中我们经常会碰到这种格式的数据, 需要将其转化为树形结构:

menu_idparent_idmenu_nameurl
10权限管理#
21用户管理/user/index
31角色管理/role/index
41菜单权限/menu/index
110系统监控#
1211登录日志/log/login/index
1911操作日志/log/sys/index
2011在线用户/online/index
271操作权限/operator/index
281部门管理/dept/index
2911系统管理/system/index
300账号关联/oauth2/index

一般的做法是查询出所有, 然后递归构建树形结构, 但其实可以巧用 MyBatis 在查询时就进行转换, 这用到了 MyBatis 的 resultMap 功能.

首先由以下表结构定义:

阅读全文 »

题意

给予一颗非负二叉搜索树, 返回任意两个节点之间的最小相差值.

注: 树至少有两个节点.

例 :

1
2
3
4
5
6
7
8
9
10
11
给予树:


1
\
4
/ \
2 7


返回: 1 (1 和 2 之间相差 1).
阅读全文 »

题意

给予一颗二叉搜索树, 返回区间 L - R 之间的所有值的总和. 二叉搜索树中没有重复值.

例 :

1
2
3
4
5
6
7
8
9
10
11
给予树, L = 3, R = 8:

5
/ \
3 6
/ \ \
2 4 8
/ / \
1 7 9

返回: 3 + 4 + 5 + 6 + 7 + 8 = 33.
阅读全文 »