MySQL EXPLAIN 中的 type range
背景
之前一直对索引分析中 type range 有误解
下面是官方文档对 type range 的解释
range
can be used when a key column is compared to a constant using any of the=
,<>
,>
,>=
,<
,<=
,IS NULL
,<=>
,BETWEEN
,LIKE
, orIN()
operators:
1
2
3
4
5
6
7
8
9
10
11 SELECT * FROM tbl_name
WHERE key_column = 10;
SELECT * FROM tbl_name
WHERE key_column BETWEEN 10 and 20;
SELECT * FROM tbl_name
WHERE key_column IN (10,20,30);
SELECT * FROM tbl_name
WHERE key_part1 = 10 AND key_part2 IN (10,20,30);
IN
查询下的 range 什么时候会恶化为 ALL
呢?按照我之前的理解,可能有两点
Redis SCAN 原理
如何使用
语法
1 | SCAN cursor [MATCH pattern] [COUNT count] [TYPE type] |
时间复杂度
一次调用是 O(1)
,完整的迭代是
O(N)
,包括不断调用直到返回 cursor 为 0;N
为集合内元素数量
Python 并发与异步
多进程
fork
Unix/Linux 操作系统提供了一个 fork
系统调用,它非常特殊,因为普通的函数调用,调用一次就返回一次,但是
fork
调用一次,返回两次
因为操作系统自动把当前进程(称为父进程)复制了一份(称为子进程),然后分别在父进程和子进程内返回,子进程永远返回
0
,而父进程返回子进程的 ID
这样做的理由是,一个父进程可以 fork
出很多子进程,所以,父进程要记下每个子进程的 ID,而子进程只需要调用
getppid
就可以拿到父进程的 ID
Python 进阶语法
因为 Python 并非是工作内容需要使用的语言,所以对语法并没有系统地学习过,加上也不会使用 Python 编写什么复杂的逻辑,所以一直以来都是使用过程中遇到需要的逻辑语法就查一下
在学习 LangChain 的过程中,发现 Python 的语法糖很多,很多设计思想提供了语法层面的支持,使得阅读源码挺费劲的
所以在这里还是系统地了解下 Python 都提供了哪些语法,也了解下 Python 编写代码的主要思想
这里主要是整理下 Python 中比较特殊的、和 Java 有较大区别的操作
函数
LangChain 文档学习 No.8 - 工具
工具是代理可以用来与世界交互的接口,它们包括:
- 工具的名称
- 工具的描述
- 工具输入 JSON 参数
- 调用的函数
- 是否应将工具的结果直接返回给用户
这些信息至关重要,使用这些信息可以用来建立行动系统,LLM 就可以使用名称、描述和 JSON 模式入参作为提示,这样它就知道如何指定要执行的操作,然后要调用的函数就相当于执行该操作
工具的输入越简单,LLM 就越容易使用它。许多代理只使用具有单个字符串输入的工具
需要注意的是名称、描述和 JSON 模式入参(如果使用)都将在提示中被使用。因此这些内容必须清楚并准确地描述应该如何使用该工具;这一点非常重要,如果 LLM 出现了不了解如何使用该工具的情况,则可能需要更改默认名称、描述或 JSON 模式入参