过滤的列指示将由表条件过滤的表行的估计百分比。也就是说,rows 显示估计的检查行数,而 rows × filters / 100 显示将与先前表连接的行数。在 MySQL 5.7.3 之前,如果使用 EXPLAIN EXTENDED,则会显示此列。从 MySQL 5.7.3 开始,默认启用扩展输出,不需要 EXTENDED 关键字。
我还是不明白。这里的“过滤”是什么意思?我们可以从这个专栏中得到什么信息?
例如,当我开始查询时,有些查询会显示 100,而有些查询会显示 18 或任何低于 100 的值。
+-------------+-------+--------+---------+---------+------+----------+
| select_type | table | type | key | key_len | rows | filtered |
+-------------+-------+--------+---------+---------+------+----------+
| PRIMARY | a | range | search | 4 | 174 | 18.00 | <--
| PRIMARY | b | eq_ref | PRIMARY | 4 | 1 | 100.00 |
| PRIMARY | …Run Code Online (Sandbox Code Playgroud) 语境:
出于好奇,我正在为我的应用程序进行负载测试。然后结果发生了很多并发插入。
在创建端点上进行负载测试后,我尝试在 Fetch 端点上进行负载测试,包括测试分页。对于分页,我组合了两列:id(带有 UUID v4 的 PK)和created_time。另外,我还添加了索引以加快排序速度。我从这里遵循这些解决方案。
问题:
由于数据是同时插入的,因此有几行具有相同的created_time,在我的例子中,同一时间戳最多有100(行)。
这是我的表架构,一个示例
BEGIN;
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
DROP TABLE IF EXISTS "payment_with_uuid";
CREATE TABLE "payment_with_uuid" (
id VARCHAR(255) PRIMARY KEY NOT NULL DEFAULT (uuid_generate_v4()),
amount integer NULL,
name varchar(255) default NULL,
created_time TIMESTAMPTZ NOT NULL DEFAULT (now() AT TIME ZONE 'utc')
);
CREATE INDEX idx_payment_pagination ON payment_with_uuid (created_time, id);
COMMIT;
Run Code Online (Sandbox Code Playgroud)
这是我的查询,
SELECT * from payment_with_uuid ORDER BY created_time DESC, id DESC LIMIT 10;
Run Code Online (Sandbox Code Playgroud)
它将返回 10 行付款,假设数据如下所示,并假设时间戳在第 …