D1 の課金は次に基づきます。
- 使用量: D1 に対して実行したクエリは、読み取り行、書き込み行、またはその両方(トランザクションやバッチの場合)としてカウントされます。
- スケールツーゼロ: 時間やキャパシティユニットでは課金されません。データベースに対してクエリを実行していなければ、コンピュートは課金されません。
- ストレージ: プランに含まれる 上限 を超えたストレージだけが課金対象です。
| Workers Free | Workers Paid | |
|---|---|---|
| 読み取り行 | 5 million / 日 | 最初の 25 billion / 月を含む + $0.001 / million rows |
| 書き込み行 | 100,000 / 日 | 最初の 50 million / 月を含む + $1.00 / million rows |
| ストレージ(保存 1 GB あたり) | 5 GB(合計) | 最初の 5 GB を含む + $0.75 / GB-mo |
- 読み取り行は、各行のサイズに関係なく、クエリが読み取った(スキャンした)行数です。たとえば、5000 行のテーブルでフルテーブルスキャンとして
SELECT * FROM tableを実行すると、読み取り行は 5,000 になります。インデックスのない列 で絞り込むクエリは、Worker に返す行数が少なくても、返す行を決めるためにさらに多くの行を読み取る(スキャンする)必要があります。 - 書き込み行は、D1 データベースへ書き込んだ行数です。書き込み操作には
INSERT、UPDATE、DELETEがあります。これらはいずれも書き込み行に計上されます。usersテーブルへ 10 行をINSERTするクエリは、書き込み行 10 になります。 - DDL 操作(例:
CREATE、ALTER、DROP)は、データベースの構造を定義または変更します。読み取り行と書き込み行の両方に計上されることがあります。使用量は、利用できるツール(meta オブジェクト、GraphQL Analytics API、または Cloudflare ダッシュボード ↗)で正確に確認してください。 - 行のサイズや列数は、行のカウント方法に影響しません。1 KB の行も 100 KB の行も、いずれも 1 行としてカウントします。
- テーブルに インデックス を定義すると、そのインデックス付きフィールドで絞り込むクエリの読み取り行数を減らせます。たとえば、
usersテーブルのタイムスタンプ列created_atにインデックスがある場合、クエリSELECT * FROM users WHERE created_at > ?1はテーブルの一部だけを読めば済みます。 - 書き込み対象にインデックス付き列が含まれると、インデックスにも 1 行書き込むため、書き込み行が 1 行増えます。テーブル本体へ 1 行、インデックスへ 1 行です。インデックスによる性能向上と読み取り行の削減は、ほぼすべての場合、この追加書き込みを上回ります。
- ストレージは、月あたりの保存ギガバイトに基づき、アカウント内のすべてのデータベースの合計です。テーブルとインデックスは、どちらも消費ストレージに計上されます。
- Free プランの上限は毎日 00:00 UTC にリセットされます。月次に含まれる上限は、最初にサブスクライブした日で決まる月次の更新日にリセットされます。
- D1 からアクセスするデータに、データ転送(エグレス)やスループット(帯域)の料金はありません。
- 読み取りレプリケーション では、読み取りレプリカに追加料金はかかりません。クエリによる
rows_readとrows_writtenに基づく、同じ使用量課金が発生します。
D1 の料金に関するよくある質問です。
はい、Workers Free プラン には、D1 を無料で試作・検証できる機能が常に含まれます。
アカウントが日次の読み取り上限または書き込み上限に達すると、D1 に対してクエリを実行できなくなります。D1 API は、日次上限を超えたことを示すエラーをクライアントに返します。含まれるストレージ上限に達した場合は、新しいデータを挿入したり、テーブルを作成・変更したり、インデックスやトリガーを作成する前に、使っていないデータベースを削除するか、古いデータを整理する必要があります。
Workers Paid プランへアップグレードすると、通常は数分以内にこれらの上限が解除されます。
追加の読み取り、書き込み、ストレージは、D1 の課金指標 に従って課金されます。
すべてのクエリは、そのクエリが読んだ行数(rows_read)と書いた行数(rows_written)の合計を含む meta オブジェクトを返します。たとえば、5000 行のテーブルに対してフルテーブルスキャン(例: SELECT * FROM users)を行うクエリは、rows_read が 5000 になります。
"meta": {
"duration": 0.20472300052642825,
"size_after": 45137920,
"rows_read": 5000,
"rows_written": 0
}これらの値は D1 の Cloudflare ダッシュボード ↗ と analytics API にも含まれるため、読み取り量と書き込み量を特定のデータベース、期間、またはその両方に紐づけられます。
いいえ。
D1 自体は追加のコンピュートに課金しません。D1 にクエリを実行して結果を計算する Workers(例: 結果を JSON にシリアライズする、クエリを実行する)は、D1 固有の使用量に加えて、Workers の料金 に従って課金されます。
はい。データベースに対して実行したすべてのクエリは、既存データを新しいデータベースへ挿入する(INSERT)、テーブルスキャン(SELECT * FROM table)、インデックスの作成を含め、読み取りまたは書き込みとしてカウントされます。
はい。インデックスを使うと、クエリが読む行数を減らせます。よくクエリするテーブルとフィルター対象の列に インデックスを作成 すると、スキャンするデータ量が減り、同時にクエリ性能も向上します。読み取りが多いワークロード(最も一般的)では、特に有効です。インデックスが参照する列への書き込みは、インデックス更新のため少なくとも 1 行分の追加書き込みが発生します。ただし、インデックスによって読み取り行数が減る効果で、通常は相殺されます。
はい。ただしごくわずかです。空のテーブルでも、列数(テーブル幅)に応じて少なくとも数キロバイトを使います。空のデータベースは約 12 KB のストレージを使います。