D1 的计费基于:
- 用量:对 D1 运行的查询将计为读取行数、写入行数,或两者兼有(对于事务或批处理)。
- 按需计费:您无需为小时数或容量单位付费。如果您未对数据库运行查询,则不会产生计算费用。
- 存储:仅对超出套餐限制的存储部分计费。
| Workers Free | Workers Paid | |
|---|---|---|
| 读取行数 | 500 万 / 天 | 每月前 250 亿行包含 + 每百万行 $0.001 |
| 写入行数 | 10 万 / 天 | 每月前 5000 万行包含 + 每百万行 $1.00 |
| 存储(每 GB) | 5 GB(总计) | 前 5 GB 包含 + 每 GB-月 $0.75 |
- 读取行数衡量查询读取(扫描)的行数,与每行大小无关。例如,如果你有一个包含 5000 行的表并运行
SELECT * FROM table作为全表扫描,这将计为 5000 行读取。在未索引列上过滤的查询可能向 Worker 返回较少的行,但仍需要读取(扫描)更多行以确定返回哪个子集。 - 写入行数衡量写入 D1 数据库的行数。写入操作包括
INSERT、UPDATE和DELETE。这些操作中的每一个都计入写入行数。向users表INSERT10 行的查询将计为 10 行写入。 - DDL 操作(例如
CREATE、ALTER和DROP)用于定义或修改数据库结构。它们可能导致读取行和写入行的混合。请确保通过可用工具(meta object、GraphQL Analytics API 或 Cloudflare 仪表板 ↗)准确跟踪使用量。 - 行大小或行中的列数不影响行的计数方式。1 KB 的行和 100 KB 的行都计为一行。
- 在表上定义索引可减少在该索引字段上过滤时查询读取的行数。例如,如果
users表在时间戳列created_at上有索引,查询SELECT * FROM users WHERE created_at > ?1只需读取表的子集。 - 当写入包含索引列时,索引会添加额外的写入行,因为写入了两行:一行写入表本身,一行写入索引。索引的性能优势和读取行数的减少在几乎所有情况下都会抵消这一额外写入。
- 存储基于每月存储的 GB 数,基于账户中所有数据库的总和。表和索引都计入消耗的存储。
- 免费限制在 UTC 00:00 每日重置。每月包含限制基于你的每月订阅续订日期重置,该日期由你首次订阅的日期决定。
- 从 D1 访问的数据没有数据传输(出口)或吞吐量(带宽)费用。
- 读取复制不会对读取副本额外收费。你根据查询的
rows_read和rows_written产生相同的使用计费。
与 D1 定价相关的常见问题:
是的,Workers 免费套餐 将始终包含免费试用和实验 D1 的功能。
当您的账户达到每日读和/或写限制时,您将无法对 D1 运行查询。D1 API 将向您的客户端返回错误,表明已超出每日限制。达到包含的存储限制后,您需要删除未使用的数据库或清理过期数据,然后才能插入新数据、创建或更改表,或创建索引和触发器。
升级到 Workers 付费套餐通常会在几分钟内移除这些限制。
您将根据 D1 的定价指标 为额外的读、写和存储付费。
每个查询都会返回一个 meta 对象,其中包含该查询读取(rows_read)和写入(rows_written)的总行数。例如,对包含 5000 行的表执行全表扫描(例如 SELECT * FROM users)的查询将返回 rows_read 值为 5000:
"meta": {
"duration": 0.20472300052642825,
"size_after": 45137920,
"rows_read": 5000,
"rows_written": 0
}这些值也包含在 D1 Cloudflare 仪表板 ↗ 和分析 API 中,使您能够将读写量归因于特定数据库、时间段或两者。
不收费。
D1 本身不对额外计算收费。查询 D1 并计算结果的 Workers(例如,将结果序列化为 JSON 和/或运行查询)根据 Workers 定价 计费,此外还需支付 D1 特定用量费用。
是的,您对数据库运行的任何查询,包括将现有数据插入(INSERT)到新数据库、表扫描(SELECT * FROM table)或创建索引,都计为读或写。
可以,您可以使用索引来减少查询读取的行数。为最常查询的表和过滤列创建索引 可减少扫描的数据量,同时提高查询性能。如果您有读密集型工作负载(最常见),这尤其有利。写入索引引用的列将至少增加一行写入以更新索引,但这通常会被索引带来的读取行数减少所抵消。
是的,尽管很少。空表至少消耗几 KB,取决于表中的列数(表宽度)。空数据库大约消耗 12 KB 存储空间。