查询性能

说到 Drizzle — 我们是在 SQL 之上的一个轻量级 TypeScript 层,几乎没有额外开销;如果想把它做到真正的 0 开销,你可以使用我们的预编译语句 API。

当你在数据库上运行查询时,会发生以下几件事:

使用预编译语句时,你只需在 Drizzle ORM 这一侧进行一次 SQL 拼接,然后数据库驱动就能够复用预编译的二进制 SQL,而不必每次都解析查询。
这在大型 SQL 查询上具有极其显著的性能优势。

不同的数据库驱动以不同方式支持预编译语句,有时 Drizzle ORM 你可以 比 better-sqlite3 驱动更快。

预处理语句

    const db = drizzle(...);

    const prepared = db.select().from(customers).prepare();
    
    const res1 = await prepared.execute();
    const res2 = await prepared.execute();
    const res3 = await prepared.execute();

占位符

每当你需要嵌入一个动态运行时值时,都可以使用 sql.placeholder(...) API

import { sql, eq } from "drizzle-orm";

const p1 = db
  .select()
  .from(customers)
  .where(eq(customers.id, sql.placeholder('id')))
  .prepare()

await p1.execute({ id: 10 }) // SELECT * FROM customers WHERE id = 10
await p1.execute({ id: 12 }) // SELECT * FROM customers WHERE id = 12

const p2 = db
  .select()
  .from(customers)
  .where(sql`${customers.name} like ${sql.placeholder('name')}`)
  .prepare();

await p2.execute({ name: '%an%' }) // SELECT * FROM customers WHERE name like '%an%'