【Prisma】Prismaで気をつけること
こんにちは、フリーランスエンジニアの太田雅昭です。
Prisma
Prismaは、TypeScriptで使えるORMです。スキーマ設計からマイグレーション、また簡単な関数でデータアクセスや更新が行えます。
気をつけること
今回は、そんなPrismaを使用していて気になった点を書いてみます。
v5.15.1時点で、JOINは内部で行われない
内部的JOINはv5.8.0でPreview版
先に申し上げると、v5.8.0からはPreview版で、PostgreSQLで内部的にJOINを用いたクエリを投げることはできます。5.10.0からはMySQLにも対応している様です。
基本的には内部でJOINは使われない
上記はあくまでPreview版なので、本番では使わない方がいいかもしれません。このPreview版機能を使用せずに、JOINのような機能を使うと以下の様になります。
const users = await prisma.user.findMany({
include: {
posts: true,
},
})
これを実行すると、まるでJOINしたかのような結果が返ってきます。しかし実際にはJOINは使われておらず、複数のSQL文が発行されます。そのためパフォーマンスは落ちることになります。速度重視の部分ではRawクエリで対応するとこになります。
Transactionは必要最低限にする
Prismaでは、以下の様にTransaction内で実行することができます。
await prisma.$transaction(async (tx) => {
// Code running in a transaction...
})
整合性が担保されるため非常に良いのですが、中で時間がかかると複数アクセスですぐにエラーが発生します。トランザクションを持てる数が制限されているためです。この数は設定で変えれるのですが、トランザクションは本当に必要最低限にした方が良さそうです。
余談
ずいぶん暑くなってきました。エアコンは冷えすぎるので使いたくないのですが、そうも言ってられない時が近づいてきています。。。