কুয়েরি অনুবাদের স্তর
Prisma আপনার কুয়েরি ইনপুটকে ডেটাবেস-নির্দিষ্ট SQL-এ অনুবাদ করে। এতে বিভিন্ন ডেটাবেসে একই আচরণ ও Prisma-এর API সেমান্টিক্স পাওয়া যায়, কিন্তু ডেটাবেস SQL পাওয়ার আগে প্রসেসিংয়ের সময় বাড়ে।
Prisma-এর DX পছন্দ, কিন্তু সমর্থিত কুয়েরি শেপে রিডের ওভারহেড কমাতে চান? বর্তমান বেঞ্চমার্ক JSON Prisma v6, v7 ও v8 জুড়ে গড় গতিবৃদ্ধি দেখায় সমর্থিত PostgreSQL ও SQLite রিডের ক্ষেত্রে; আলাদা আলাদা কুয়েরি শেপে ফল ভিন্ন হয়।
const users = await prisma.user.findMany({
where: { status: 'ACTIVE' },
include: { posts: true },
})SELECT user_t.id, user_t.email, user_t.status, COALESCE(( SELECT COALESCE(json_agg(json_build_object( 'id', posts_0.id, 'title', posts_0.title, 'authorId', posts_0."authorId" )), '[]'::json) FROM "public"."Post" posts_0 WHERE posts_0."authorId" = user_t.id ), '[]'::json) AS postsFROM "public"."User" user_tWHERE user_t.status = $1SELECT user_t.id, user_t.email, user_t.status, COALESCE(( SELECT COALESCE(json_group_array(row), json('[]')) FROM ( SELECT json_object( 'id', posts_0.id, 'title', posts_0.title, 'authorId', posts_0."authorId" ) AS row FROM "Post" posts_0 WHERE posts_0."authorId" = user_t.id ) AS posts_row_1 ), json('[]')) AS postsFROM "User" user_tWHERE user_t.status = ?createToSQL-এর আউটপুট, লাইন ব্রেক যোগ করা হয়েছে।Prisma-এর বিবর্তন ও পারফরম্যান্সের বৈশিষ্ট্য বুঝলে বোঝা যায় এই এক্সটেনশন কেন আছে।
Prisma তার লক্ষ্যের জন্য সঠিক আর্কিটেকচারগত সিদ্ধান্ত নিয়েছে: টাইপ সেফটি, ডেভেলপার এক্সপেরিয়েন্স এবং বিভিন্ন ডেটাবেসে একই আচরণ। কিন্তু এই সিদ্ধান্তগুলো এমন ওভারহেড তৈরি করে যা স্কেলে চোখে পড়ে। এই এক্সটেনশন Prisma-কে প্রতিস্থাপন করে না—যে টিমগুলো Prisma-এর DX রাখতে চায় এবং যেখানে দরকার সেখানে দ্রুত এক্সিকিউশন চায়, তাদের জন্য এটি রিড অপটিমাইজ করে।
Prisma 2 চালু হয় 2019 সালে। টাইপ-সেফ ডেটাবেস অ্যাক্সেস এবং স্কিমা থেকে জেনারেট হওয়া টাইপ দিয়ে এটি TypeScript ORM-এর জগৎ বদলে দেয়। কুয়েরি অনুবাদ ও যাচাই করতে এবং প্রচলিত JavaScript ORM-এ যা পাওয়া কঠিন ছিল এমন শক্ত নিশ্চয়তা দিতে Prisma একটি ইঞ্জিন-ভিত্তিক আর্কিটেকচার আনে।
Prisma নেস্টেড রাইট, ট্রানজ্যাকশন ও মিডলওয়্যারের মতো শক্তিশালী ফিচার যোগ করে। ফিচার বাড়ে, কিন্তু প্রতিটি কুয়েরিকে তখনও একটি আর্কিটেকচারগত খরচ দিতে হয়: কুয়েরি উপস্থাপন, যাচাই ও এক্সিকিউট করা হয়, আর ফলাফলকে Prisma API-এর সাথে মিলিয়ে গঠন করা হয়।
আরও বেশি টিম উচ্চ-ট্রাফিক ওয়ার্কলোডে Prisma ডিপ্লয় করায় প্রতি কুয়েরির নির্দিষ্ট ওভারহেড পরিমাপযোগ্য হয়ে ওঠে। রিড-প্রধান এন্ডপয়েন্ট, অ্যানালিটিক্স, অ্যাগ্রিগেশন এবং বড় রেজাল্ট সেটে এটি সবচেয়ে বেশি দেখা যায়। এই ওভারহেড কোনো বাগ নয়; এটি Prisma-এর নিশ্চয়তা ও API আচরণের খরচ।
Prisma পারফরম্যান্স ও ইঞ্জিন পরিবর্তনকে কেন্দ্র করে বড় আপডেট প্রকাশ করে। উন্নতির পরও সরাসরি raw SQL চালানোর তুলনায় পার্সিং, যাচাই, পরিকল্পনা ও ফলাফল গঠনের একটি অনিবার্য খরচ থেকে যায়।
এই এক্সটেনশন রিড পারফরম্যান্সে মনোযোগ দেয়। findMany, findFirst, findUnique, count, aggregate ও groupBy-এর জন্য এটি Prisma-এর রিড এক্সিকিউশন পথ এড়িয়ে যায়, আর রাইট, মাইগ্রেশন, স্কিমা ব্যবস্থাপনা ও টাইপ জেনারেশনের জন্য Prisma-ই থাকে। রোলআউটের আগে আপনার Prisma ভার্সনের সাথে সামঞ্জস্য যাচাই করুন।
Prisma আপনার কুয়েরি ইনপুটকে ডেটাবেস-নির্দিষ্ট SQL-এ অনুবাদ করে। এতে বিভিন্ন ডেটাবেসে একই আচরণ ও Prisma-এর API সেমান্টিক্স পাওয়া যায়, কিন্তু ডেটাবেস SQL পাওয়ার আগে প্রসেসিংয়ের সময় বাড়ে।
Prisma স্কিমার সাথে মিলিয়ে কুয়েরি যাচাই করে এবং API-স্তরের নিশ্চয়তা বজায় রাখে। এই সুরক্ষাগুলো নির্দিষ্ট ধরনের বাগ প্রতিরোধ করে, কিন্তু প্রতিটি কুয়েরিতে ওভারহেডও যোগ করে।
ফলাফলকে Prisma-এর API আচরণের সাথে মিলিয়ে গঠন করা হয়। DX ও সামঞ্জস্যের জন্য এটি চমৎকার, কিন্তু ল্যাটেন্সি বাড়ায়, বিশেষ করে বড় রেজাল্ট সেট ও জটিল include-এ।
সমর্থিত রিড কুয়েরির জন্য একটি দ্রুততর পথ দিয়ে এই এক্সটেনশন Prisma-এর পরিপূরক হিসেবে কাজ করে। স্কিমা, মাইগ্রেশন, রাইট ও জেনারেট হওয়া টাইপের জন্য Prisma থাকে, আর বাছাই করা ঘন ঘন চলা রিডগুলো ডেটাবেস-নেটিভ ক্লায়েন্টের মাধ্যমে জেনারেট হওয়া SQL দিয়ে চলে।
Prisma v6, v7, v8, Drizzle ORM ও prisma-sql জুড়ে সর্বশেষ বেঞ্চমার্ক JSON-এর তুলনা
Prisma v6 (6.19.3): Prisma-এর তুলনায় গড় গতিবৃদ্ধি 1.99×
Prisma v7 (7.10.0): Prisma-এর তুলনায় গড় গতিবৃদ্ধি 1.47×
Prisma v8 (8.1.0-dev.1): Prisma-এর তুলনায় গড় গতিবৃদ্ধি 1.54×
Prisma v6 (6.19.3): Prisma-এর তুলনায় গড় গতিবৃদ্ধি 4.80×
Prisma v7 (7.10.0): Prisma-এর তুলনায় গড় গতিবৃদ্ধি 2.29×
Prisma v8 (8.1.0-dev.1): Prisma-এর তুলনায় গড় গতিবৃদ্ধি 2.10×
সর্বশেষ benchmark-results/*-latest.json ফাইল থেকে বিল্ড টাইমে তৈরি। দুই ডেটাবেসের বারগুলো একই স্কেলে; অ্যাম্বার রং প্রতি ডেটাবেসের সেরা রান চিহ্নিত করে। আলাদা আলাদা কুয়েরি শেপে ফল ভিন্ন হয়।প্রতি কুয়েরির টেবিলসম্পূর্ণ বেঞ্চমার্ক ডেটা দেখুন
Welch-এর t-test এবং 1ms ব্যবহারিক তাৎপর্য সীমাসহ পরিসংখ্যানগত তুলনা
এই ফলাফলগুলো রানটাইম মোড প্রতিফলিত করে, যেখানে প্রতিটি রিকোয়েস্টে কুয়েরি SQL-এ রূপান্তরিত হয়। প্রি-রেন্ডারড মোডে SQL বিল্ড টাইমে তৈরি হয় — রানটাইমে কোনো রূপান্তর ওভারহেড ছাড়াই raw প্যারামিটারাইজড কুয়েরি চলে।
| টেস্ট | Prisma | prisma-sql | Drizzle | গতিবৃদ্ধি | তাৎপর্য | CV% | n |
|---|---|---|---|---|---|---|---|
| findMany basic | 0.529ms±0.064 | 0.231ms±0.234 | 0.271ms | ~1.00x | ≈ | 198.0% | 50 |
| findMany where = | 0.501ms±0.0069 | 0.208ms±0.0094 | 0.347ms | ~1.00x | ≈ | 15.6% | 50 |
| findMany where >= | 16.51ms±0.267 | 5.67ms±0.338 | 7.43ms | 2.91x1.31x D | *** | 21.0% | 50 |
| findMany where IN | 0.657ms±0.142 | 0.292ms±0.017 | 0.492ms | ~1.00x | ≈ | 20.3% | 50 |
| findMany where null | 0.280ms±0.020 | 0.167ms±0.012 | 0.177ms | ~1.00x | ≈ | 25.7% | 50 |
| findMany ILIKE | 0.297ms±0.0097 | 0.168ms±0.0089 | 0.278ms | ~1.00x | ≈ | 18.6% | 50 |
| findMany AND | 2.72ms±0.161 | 1.11ms±0.111 | 1.45ms | 2.45x1.31x D | *** | 31.5% | 50 |
| findMany OR | 13.98ms±0.286 | 4.69ms±0.221 | 5.88ms | 2.98x1.25x D | *** | 17.0% | 50 |
| findMany NOT | 0.639ms±0.013 | 0.274ms±0.0091 | 0.478ms | ~1.00x | ≈ | 12.2% | 50 |
| findMany orderBy | 4.50ms±0.219 | 1.48ms±0.075 | 1.76ms | 3.03x1.18x D | *** | 18.5% | 50 |
| findMany pagination | 0.342ms±0.032 | 0.171ms±0.026 | 0.295ms | ~1.00x | ≈ | 43.2% | 50 |
| findMany select | 0.294ms±0.0094 | 0.181ms±0.0072 | 0.176ms | ~1.00x | ≈ | 14.0% | 50 |
| findMany relation some | 1.69ms±0.098 | 0.999ms±0.064 | — | ~1.00x | ≈ | 22.1% | 50 |
| findMany relation every | 2.17ms±0.096 | 1.47ms±0.078 | — | ~1.00x | ≈ | 18.9% | 50 |
| findMany relation none | 26.02ms±0.517 | 10.06ms±0.511 | — | 2.59x | *** | 18.0% | 50 |
| findMany nested relation | 1.76ms±0.076 | 1.24ms±0.060 | — | ~1.00x | ≈ | 18.0% | 50 |
| findMany complex | 2.94ms±0.109 | 1.46ms±0.068 | 1.73ms | 2.01x1.18x D | *** | 17.2% | 50 |
| findFirst | 0.378ms±0.032 | 0.175ms±0.014 | 0.350ms | ~1.00x | ≈ | 28.0% | 50 |
| findFirst skip | 0.328ms±0.107 | 0.147ms±0.0064 | 0.301ms | ~1.00x | ≈ | 15.2% | 50 |
| findUnique id | 0.232ms±0.0097 | 0.102ms±0.0055 | 0.207ms | ~1.00x | ≈ | 18.6% | 50 |
| findUnique email | 0.210ms±0.0072 | 0.090ms±0.0044 | 0.179ms | ~1.00x | ≈ | 17.1% | 50 |
| count | 0.109ms±0.0033 | 0.063ms±0.0030 | 0.064ms | ~1.00x | ≈ | 16.2% | 50 |
| count where | 0.469ms±0.015 | 0.247ms±0.016 | 0.287ms | ~1.00x | ≈ | 22.2% | 50 |
| aggregate count | 0.215ms±0.0078 | 0.155ms±0.0042 | — | ~1.00x | ≈ | 9.2% | 50 |
| aggregate sum/avg | 0.305ms±0.014 | 0.261ms±0.0053 | — | ~1.00x | ≈ | 7.1% | 50 |
| aggregate where | 0.446ms±0.0100 | 0.239ms±0.0058 | — | ~1.00x | ≈ | 8.7% | 50 |
| aggregate min/max | 0.305ms±0.015 | 0.268ms±0.010 | — | ~1.00x | ≈ | 13.2% | 50 |
| aggregate complete | 0.381ms±0.0061 | 0.292ms±0.0072 | — | ~1.00x | ≈ | 8.8% | 50 |
| groupBy | 0.419ms±0.024 | 0.344ms±0.013 | — | ~1.00x | ≈ | 12.8% | 50 |
| groupBy count | 0.422ms±0.0100 | 0.358ms±0.0050 | — | ~1.00x | ≈ | 4.8% | 50 |
| groupBy multi | 0.544ms±0.013 | 0.442ms±0.052 | — | ~1.00x | ≈ | 38.9% | 50 |
| groupBy having | 0.505ms±0.011 | 0.375ms±0.0086 | — | ~1.00x | ≈ | 8.2% | 50 |
| groupBy + where | 0.550ms±0.011 | 0.294ms±0.0064 | — | ~1.00x | ≈ | 7.8% | 50 |
| _count via include | 0.679ms±0.013 | 0.511ms±0.013 | — | ~1.00x | ≈ | 8.9% | 50 |
| _count via include + relations | 1.55ms±0.037 | 0.666ms±0.017 | — | ~1.00x | ≈ | 9.3% | 50 |
| groupBy aggregates | 0.557ms±0.0097 | 0.465ms±0.0091 | — | ~1.00x | ≈ | 6.9% | 50 |
| groupBy min/max | 0.531ms±0.0080 | 0.441ms±0.0053 | — | ~1.00x | ≈ | 4.2% | 50 |
| include list + nested to-one | 1.46ms±0.029 | 0.337ms±0.032 | — | 4.32x | *** | 30.2% | 50 |
| include list + nullable to-one | 2.59ms±0.081 | 1.65ms±0.056 | — | ~1.00x | ≈ | 11.9% | 50 |
| include posts | 4.25ms±0.216 | 2.35ms±0.120 | 5.77ms | 1.81x2.45x D | *** | 18.9% | 50 |
| include profile | 0.635ms±0.871 | 0.540ms±0.241 | 0.648ms | ~1.00x | ≈ | 104.7% | 50 |
| include 3 levels | 4.48ms±0.148 | 4.03ms±0.147 | 4.58ms | ~1.00x | ≈ | 13.6% | 50 |
| include 4 levels | 5.61ms±0.182 | 3.39ms±0.132 | 4.65ms | 1.65x1.37x D | *** | 13.9% | 50 |
| include + where | 4.04ms±0.176 | 2.88ms±0.399 | 5.51ms | ~1.00x | ≈ | 46.7% | 50 |
| include + select nested | 2.52ms±0.139 | 1.96ms±0.185 | 4.42ms | ~1.00x | ≈ | 31.8% | 50 |
| findMany startsWith | 0.270ms±0.028 | 0.140ms±0.014 | 0.314ms | ~1.00x | ≈ | 35.4% | 50 |
| findMany endsWith | 0.563ms±0.015 | 0.216ms±0.0069 | 0.369ms | ~1.00x | ≈ | 11.1% | 50 |
| findMany NOT contains | 0.627ms±0.022 | 0.250ms±0.104 | 0.447ms | ~1.00x | ≈ | 121.8% | 50 |
| findMany LIKE | 0.245ms±0.0094 | 0.111ms±0.0069 | 0.250ms | ~1.00x | ≈ | 21.9% | 50 |
| findMany < | 25.55ms±0.398 | 7.55ms±0.292 | 10.60ms | 3.39x1.40x D | *** | 13.4% | 50 |
| findMany <= | 26.43ms±0.371 | 7.78ms±0.220 | 10.97ms | 3.40x1.41x D | *** | 10.2% | 50 |
| findMany > | 15.55ms±0.599 | 5.21ms±0.356 | 6.78ms | 2.99x1.30x D | *** | 24.2% | 50 |
| findMany NOT IN | 0.644ms±0.013 | 0.282ms±0.011 | 0.487ms | ~1.00x | ≈ | 13.4% | 50 |
| findMany isNot null | 0.642ms±0.014 | 0.336ms±0.017 | 0.362ms | ~1.00x | ≈ | 18.6% | 50 |
| orderBy multi-field | 4.99ms±0.190 | 1.55ms±0.076 | 1.88ms | 3.22x1.21x D | *** | 17.0% | 50 |
| orderBy relation to-one | 4.10ms±0.135 | 3.08ms±0.090 | — | 1.33x | *** | 10.2% | 50 |
| orderBy relation + scalar | 5.02ms±0.258 | 3.63ms±0.205 | — | 1.39x | *** | 20.0% | 50 |
| orderBy nullable relation | 4.08ms±0.300 | 2.94ms±0.181 | — | 1.39x | *** | 21.1% | 50 |
| orderBy deep relation | 5.43ms±0.186 | 4.04ms±0.174 | — | 1.34x | *** | 14.9% | 50 |
| orderBy deep relation + scalar | 6.34ms±0.135 | 4.62ms±0.100 | — | 1.37x | *** | 7.8% | 50 |
| distinct status | 8.84ms±0.376 | 1.56ms±0.181 | — | 5.66x | *** | 36.9% | 50 |
| distinct multi | 12.04ms±0.171 | 2.50ms±0.073 | — | 4.81x | *** | 10.3% | 50 |
| cursor composite tuple | 1.61ms±0.025 | 1.13ms±0.017 | — | ~1.00x | ≈ | 5.3% | 50 |
| cursor composite desc | 1.75ms±0.037 | 1.31ms±0.021 | — | ~1.00x | ≈ | 5.8% | 50 |
| cursor prefix of orderBy | 2.70ms±0.188 | 1.66ms±0.082 | — | 1.63x | *** | 18.1% | 50 |
| select + include | 1.60ms±0.101 | 0.309ms±0.021 | 0.568ms | 5.16x1.84x D | *** | 24.6% | 50 |
| _count relation | 1.74ms±0.341 | 1.67ms±0.781 | — | ~1.00x | ≈ | 123.8% | 50 |
| _count multi-relation | 0.257ms±0.029 | 0.218ms±0.045 | — | ~1.00x | ≈ | 62.4% | 50 |
| _count inside include | 2.32ms±0.126 | 1.55ms±0.124 | — | ~1.00x | ≈ | 32.0% | 50 |
| _count inside nested select | 4.64ms±0.202 | 3.69ms±0.266 | — | ~1.00x | ≈ | 24.3% | 50 |
| _count deep include | 5.49ms±0.247 | 3.98ms±0.158 | — | 1.38x | *** | 14.1% | 50 |
| ILIKE special chars | 0.425ms±0.033 | 0.193ms±0.022 | — | ~1.00x | ≈ | 36.5% | 50 |
| LIKE case sensitive | 0.263ms±0.010 | 0.110ms±0.0078 | — | ~1.00x | ≈ | 24.0% | 50 |
| findMany Date range | 0.424ms±0.012 | 0.190ms±0.012 | 0.321ms | ~1.00x | ≈ | 21.1% | 50 |
| count Date range | 1.14ms±0.047 | 0.925ms±0.052 | 0.995ms | ~1.00x | ≈ | 19.8% | 50 |
| findMany Date gte | 0.403ms±0.025 | 0.178ms±0.0058 | 0.303ms | ~1.00x | ≈ | 11.6% | 50 |
| depth-1 low-fan | 0.566ms±0.021 | 0.447ms±0.102 | — | ~1.00x | ≈ | 73.7% | 50 |
| depth-1 mid-fan | 4.21ms±0.110 | 2.34ms±0.178 | — | 1.80x | *** | 26.3% | 50 |
| depth-1 high-fan | 4.16ms±0.122 | 2.25ms±0.130 | — | 1.85x | *** | 20.4% | 50 |
| depth-1 wide | 3.11ms±0.114 | 1.78ms±0.166 | — | 1.75x | *** | 31.3% | 50 |
| depth-1 unbound | 39.65ms±3.78 | 9.43ms±0.884 | — | 4.21x | *** | 29.1% | 50 |
| depth-2 | 4.78ms±0.153 | 3.54ms±0.187 | — | 1.35x | *** | 18.6% | 50 |
| depth-2 paginated Project→tasks | 3.16ms±0.149 | 2.68ms±0.161 | — | ~1.00x | ≈ | 20.6% | 50 |
| depth-2 high-fan | 3.84ms±0.185 | 2.86ms±0.229 | — | ~1.00x | ≈ | 28.7% | 50 |
| depth-2 wide | 4.90ms±0.176 | 3.08ms±0.176 | — | 1.59x | *** | 20.6% | 50 |
| depth-2 unbound | 65.60ms±1.52 | 17.60ms±0.479 | — | 3.73x | *** | 4.4% | 10 |
| depth-3 unbound | 15.32ms±0.281 | 8.38ms±0.354 | — | 1.83x | *** | 15.8% | 50 |
| depth-3 paginated | 2.44ms±0.156 | 2.34ms±0.253 | — | ~1.00x | ≈ | 32.7% | 50 |
| depth-4 unbound | 9.96ms±0.268 | 6.14ms±0.266 | — | 1.62x | *** | 15.7% | 50 |
| depth-4 paginated | 3.42ms±0.161 | 2.42ms±0.175 | — | ~1.00x | ≈ | 23.6% | 50 |
| findFirst depth-2 | 2.91ms±0.114 | 2.30ms±0.173 | — | ~1.00x | ≈ | 25.9% | 50 |
| findUnique depth-2 Project→tasks→comment | 3.27ms±0.113 | 2.16ms±0.173 | — | 1.52x | *** | 27.5% | 50 |
| complex nested select | 4.51ms±0.428 | 3.01ms±0.777 | — | ~1.00x | ≈ | 65.7% | 50 |
| ultra deep query | 15.94ms±0.546 | 5.83ms±0.361 | — | 2.73x | *** | 22.0% | 50 |
| transaction: (3 operations) | 3.00ms±0.275 | 1.41ms±0.246 | — | 2.14x | *** | 53.2% | 50 |
| টেস্ট | Prisma | prisma-sql | Drizzle | গতিবৃদ্ধি | তাৎপর্য | CV% | n |
|---|---|---|---|---|---|---|---|
| findMany basic | 0.274ms±0.012 | 0.223ms±0.072 | 0.252ms | ~1.00x | ≈ | 97.3% | 50 |
| findMany where = | 0.212ms±0.0047 | 0.158ms±0.0044 | 0.244ms | ~1.00x | ≈ | 9.6% | 50 |
| findMany where >= | 7.36ms±0.258 | 4.63ms±0.213 | 6.57ms | 1.59x1.42x D | *** | 16.5% | 50 |
| findMany where IN | 0.372ms±0.027 | 0.231ms±0.015 | 0.410ms | ~1.00x | ≈ | 21.1% | 50 |
| findMany where null | 0.111ms±0.084 | 0.091ms±0.0072 | 0.106ms | ~1.00x | ≈ | 26.6% | 50 |
| findMany ILIKE | 0.120ms±0.0036 | 0.088ms±0.0025 | 0.154ms | ~1.00x | ≈ | 10.0% | 50 |
| findMany AND | 0.968ms±0.013 | 0.540ms±0.093 | 0.705ms | ~1.00x | ≈ | 56.3% | 50 |
| findMany OR | 7.35ms±0.343 | 3.95ms±0.218 | 5.27ms | 1.86x1.33x D | *** | 19.1% | 50 |
| findMany NOT | 0.361ms±0.022 | 0.231ms±0.121 | 0.411ms | ~1.00x | ≈ | 149.0% | 50 |
| findMany orderBy | 2.04ms±0.073 | 0.581ms±0.022 | 0.706ms | 3.50x1.22x D | *** | 13.5% | 50 |
| findMany pagination | 0.156ms±0.0097 | 0.138ms±0.110 | 0.232ms | ~1.00x | ≈ | 201.6% | 50 |
| findMany select | 0.113ms±0.0050 | 0.120ms±0.0053 | 0.101ms | ~1.00x | ≈ | 15.6% | 50 |
| findMany relation some | 0.527ms±0.0044 | 0.404ms±0.0050 | — | ~1.00x | ≈ | 4.4% | 50 |
| findMany relation every | 0.515ms±0.0058 | 0.360ms±0.0069 | — | ~1.00x | ≈ | 7.0% | 50 |
| findMany relation none | 9.89ms±0.305 | 8.53ms±0.378 | — | 1.16x | *** | 16.7% | 50 |
| findMany nested relation | 0.578ms±0.016 | 0.392ms±0.045 | — | ~1.00x | ≈ | 38.6% | 50 |
| findMany complex | 0.799ms±0.016 | 0.461ms±0.083 | 0.587ms | ~1.00x | ≈ | 57.8% | 50 |
| findFirst | 0.132ms±0.0047 | 0.101ms±0.011 | 0.197ms | ~1.00x | ≈ | 35.7% | 50 |
| findFirst skip | 0.135ms±0.048 | 0.105ms±0.025 | 0.189ms | ~1.00x | ≈ | 64.2% | 50 |
| findUnique id | 0.107ms±0.024 | 0.070ms±0.015 | 0.130ms | ~1.00x | ≈ | 65.1% | 50 |
| findUnique email | 0.106ms±0.0050 | 0.065ms±0.0097 | 0.128ms | ~1.00x | ≈ | 47.4% | 50 |
| count | 0.079ms±0.0036 | 0.060ms±0.0028 | 0.059ms | ~1.00x | ≈ | 16.4% | 50 |
| count where | 0.398ms±0.0086 | 0.239ms±0.013 | 0.272ms | ~1.00x | ≈ | 18.4% | 50 |
| aggregate count | 0.174ms±0.0019 | 0.146ms±0.0022 | — | ~1.00x | ≈ | 5.1% | 50 |
| aggregate sum/avg | 0.265ms±0.0033 | 0.248ms±0.0033 | — | ~1.00x | ≈ | 5.0% | 50 |
| aggregate where | 0.369ms±0.0047 | 0.229ms±0.0030 | — | ~1.00x | ≈ | 4.7% | 50 |
| aggregate min/max | 0.256ms±0.0036 | 0.247ms±0.0030 | — | ~1.00x | ≈ | 4.6% | 50 |
| aggregate complete | 0.325ms±0.0036 | 0.284ms±0.0033 | — | ~1.00x | ≈ | 4.3% | 50 |
| groupBy | 0.360ms±0.022 | 0.349ms±0.0072 | — | ~1.00x | ≈ | 7.4% | 50 |
| groupBy count | 0.368ms±0.0072 | 0.359ms±0.012 | — | ~1.00x | ≈ | 11.7% | 50 |
| groupBy multi | 0.460ms±0.0089 | 0.453ms±0.016 | — | ~1.00x | ≈ | 12.3% | 50 |
| groupBy having | 0.432ms±0.0075 | 0.409ms±0.050 | — | ~1.00x | ≈ | 41.0% | 50 |
| groupBy + where | 0.425ms±0.0030 | 0.278ms±0.0039 | — | ~1.00x | ≈ | 5.0% | 50 |
| _count via include | 0.606ms±0.0055 | 0.533ms±0.012 | — | ~1.00x | ≈ | 7.8% | 50 |
| _count via include + relations | 1.16ms±0.011 | 0.635ms±0.0091 | — | ~1.00x | ≈ | 5.1% | 50 |
| groupBy aggregates | 0.479ms±0.0064 | 0.465ms±0.0044 | — | ~1.00x | ≈ | 3.4% | 50 |
| groupBy min/max | 0.462ms±0.051 | 0.452ms±0.0044 | — | ~1.00x | ≈ | 3.6% | 50 |
| include list + nested to-one | 0.941ms±0.015 | 0.324ms±0.013 | — | ~1.00x | ≈ | 13.8% | 50 |
| include list + nullable to-one | 1.29ms±0.196 | 1.53ms±0.027 | — | ~1.00x | ≈ | 6.2% | 50 |
| include posts | 1.36ms±0.143 | 1.29ms±0.111 | 2.55ms | ~1.00x | ≈ | 29.7% | 50 |
| include profile | 0.316ms±0.027 | 0.248ms±0.029 | 0.462ms | ~1.00x | ≈ | 35.6% | 50 |
| include 3 levels | 1.80ms±0.210 | 1.92ms±0.190 | 2.50ms | ~1.00x | ≈ | 32.2% | 50 |
| include 4 levels | 5.99ms±0.553 | 4.24ms±0.269 | 5.54ms | 1.41x1.31x D | *** | 22.9% | 50 |
| include + where | 2.43ms±0.202 | 2.31ms±0.251 | 1.58ms | ~1.00x | ≈ | 35.6% | 50 |
| include + select nested | 1.90ms±0.238 | 2.15ms±0.330 | 4.86ms | ~1.00x | ≈ | 52.6% | 50 |
| findMany startsWith | 0.124ms±0.011 | 0.089ms±0.0075 | 0.183ms | ~1.00x | ≈ | 27.5% | 50 |
| findMany endsWith | 0.235ms±0.011 | 0.165ms±0.0036 | 0.252ms | ~1.00x | ≈ | 8.0% | 50 |
| findMany NOT contains | 0.218ms±0.0069 | 0.158ms±0.0047 | 0.234ms | ~1.00x | ≈ | 10.7% | 50 |
| findMany LIKE | 0.081ms±0.0039 | 0.051ms±0.0022 | 0.103ms | ~1.00x | ≈ | 14.9% | 50 |
| findMany < | 10.36ms±0.265 | 6.60ms±0.759 | 8.31ms | 1.57x1.26x D | *** | 37.6% | 50 |
| findMany <= | 11.00ms±0.608 | 6.71ms±0.552 | 8.80ms | 1.64x1.31x D | *** | 28.2% | 50 |
| findMany > | 7.08ms±0.345 | 4.40ms±0.411 | 6.08ms | 1.61x1.38x D | *** | 30.2% | 50 |
| findMany NOT IN | 0.381ms±0.064 | 0.241ms±0.042 | 0.437ms | ~1.00x | ≈ | 55.8% | 50 |
| findMany isNot null | 0.212ms±0.011 | 0.168ms±0.011 | 0.197ms | ~1.00x | ≈ | 22.0% | 50 |
| orderBy multi-field | 2.04ms±0.039 | 0.560ms±0.016 | 0.662ms | 3.64x1.18x D | *** | 10.1% | 50 |
| orderBy relation to-one | 1.87ms±0.049 | 1.39ms±0.052 | — | ~1.00x | ≈ | 13.0% | 50 |
| orderBy relation + scalar | 1.95ms±0.057 | 1.46ms±0.057 | — | ~1.00x | ≈ | 13.4% | 50 |
| orderBy nullable relation | 1.59ms±0.032 | 1.15ms±0.018 | — | ~1.00x | ≈ | 5.8% | 50 |
| orderBy deep relation | 2.09ms±0.121 | 1.61ms±0.072 | — | ~1.00x | ≈ | 15.3% | 50 |
| orderBy deep relation + scalar | 2.61ms±0.124 | 2.10ms±0.305 | — | ~1.00x | ≈ | 45.9% | 50 |
| distinct status | 7.73ms±0.274 | 1.28ms±0.051 | — | 6.03x | *** | 13.9% | 50 |
| distinct multi | 11.00ms±0.363 | 2.54ms±0.220 | — | 4.33x | *** | 28.5% | 50 |
| cursor composite tuple | 1.39ms±0.0067 | 1.09ms±0.0078 | — | ~1.00x | ≈ | 2.5% | 50 |
| cursor composite desc | 1.84ms±0.114 | 1.45ms±0.080 | — | ~1.00x | ≈ | 18.9% | 50 |
| cursor prefix of orderBy | 2.61ms±0.123 | 2.01ms±0.099 | — | ~1.00x | ≈ | 17.7% | 50 |
| select + include | 1.06ms±0.039 | 0.335ms±0.022 | 0.594ms | ~1.00x | ≈ | 22.8% | 50 |
| _count relation | 1.66ms±0.123 | 1.80ms±0.107 | — | ~1.00x | ≈ | 22.1% | 50 |
| _count multi-relation | 0.737ms±0.041 | 0.715ms±0.041 | — | ~1.00x | ≈ | 20.0% | 50 |
| _count inside include | 4.12ms±0.256 | 2.85ms±0.151 | — | 1.45x | *** | 19.5% | 50 |
| _count inside nested select | 1.54ms±0.078 | 1.45ms±0.091 | — | ~1.00x | ≈ | 21.3% | 50 |
| _count deep include | 2.19ms±0.135 | 1.76ms±0.083 | — | ~1.00x | ≈ | 16.0% | 50 |
| ILIKE special chars | 0.184ms±0.028 | 0.139ms±0.025 | — | ~1.00x | ≈ | 52.5% | 50 |
| LIKE case sensitive | 0.135ms±0.0061 | 0.099ms±0.0044 | — | ~1.00x | ≈ | 15.2% | 50 |
| findMany Date range | 0.150ms±0.0067 | 0.113ms±0.0055 | 0.205ms | ~1.00x | ≈ | 16.7% | 50 |
| count Date range | 0.353ms±0.0050 | 0.316ms±0.0047 | 0.343ms | ~1.00x | ≈ | 5.4% | 50 |
| findMany Date gte | 0.145ms±0.0078 | 0.105ms±0.0067 | 0.177ms | ~1.00x | ≈ | 21.7% | 50 |
| depth-1 low-fan | 0.211ms±0.049 | 0.155ms±0.029 | — | ~1.00x | ≈ | 55.6% | 50 |
| depth-1 mid-fan | 1.03ms±0.123 | 0.959ms±0.142 | — | ~1.00x | ≈ | 47.4% | 50 |
| depth-1 high-fan | 0.840ms±0.107 | 0.791ms±0.011 | — | ~1.00x | ≈ | 4.7% | 50 |
| depth-1 wide | 0.789ms±0.120 | 0.826ms±0.037 | — | ~1.00x | ≈ | 15.5% | 50 |
| depth-1 unbound | 17.14ms±0.884 | 8.82ms±0.673 | — | 1.94x | *** | 25.0% | 50 |
| depth-2 | 3.76ms±0.234 | 3.72ms±0.175 | — | ~1.00x | ≈ | 17.0% | 50 |
| depth-2 paginated Project→tasks | 2.36ms±0.296 | 2.73ms±0.275 | — | ~1.00x | ≈ | 40.8% | 50 |
| depth-2 high-fan | 3.13ms±0.208 | 3.08ms±0.108 | — | ~1.00x | ≈ | 12.4% | 50 |
| depth-2 wide | 3.11ms±0.244 | 3.16ms±0.207 | — | ~1.00x | ≈ | 22.5% | 50 |
| depth-2 unbound | 30.14ms±1.02 | 17.11ms±0.944 | — | 1.76x | *** | 19.2% | 50 |
| depth-3 unbound | 10.80ms±0.443 | 8.68ms±0.371 | — | 1.25x | *** | 15.1% | 50 |
| depth-3 paginated | 1.19ms±0.112 | 1.10ms±0.105 | — | ~1.00x | ≈ | 31.3% | 50 |
| depth-4 unbound | 4.88ms±0.333 | 4.59ms±0.360 | — | ~1.00x | ≈ | 28.9% | 50 |
| depth-4 paginated | 1.31ms±0.047 | 0.976ms±0.068 | — | ~1.00x | ≈ | 23.6% | 50 |
| findFirst depth-2 | 0.853ms±0.024 | 0.831ms±0.078 | — | ~1.00x | ≈ | 31.1% | 50 |
| findUnique depth-2 Project→tasks→comment | 0.846ms±0.093 | 0.727ms±0.021 | — | ~1.00x | ≈ | 9.8% | 50 |
| complex nested select | 2.88ms±0.093 | 1.82ms±0.035 | — | 1.58x | *** | 6.9% | 50 |
| ultra deep query | 11.34ms±0.241 | 7.04ms±0.089 | — | 1.61x | *** | 4.5% | 50 |
| transaction: (3 operations) | 3.29ms±0.313 | 1.56ms±0.311 | — | 2.12x | *** | 62.9% | 50 |
| টেস্ট | Prisma | prisma-sql | Drizzle | গতিবৃদ্ধি | তাৎপর্য | CV% | n |
|---|---|---|---|---|---|---|---|
| findMany basic | 0.279ms±0.016 | 0.236ms±0.024 | 0.275ms | ~1.00x | ≈ | 32.6% | 50 |
| findMany where = | 0.362ms±0.186 | 0.245ms±0.075 | 0.413ms | ~1.00x | ≈ | 89.0% | 50 |
| findMany where >= | 8.32ms±0.363 | 4.81ms±0.542 | 6.99ms | 1.73x1.45x D | *** | 37.4% | 50 |
| findMany where IN | 0.383ms±0.014 | 0.254ms±0.011 | 0.420ms | ~1.00x | ≈ | 14.9% | 50 |
| findMany where null | 0.166ms±0.013 | 0.137ms±0.084 | 0.150ms | ~1.00x | ≈ | 166.4% | 50 |
| findMany ILIKE | 0.115ms±0.0053 | 0.083ms±0.0033 | 0.146ms | ~1.00x | ≈ | 14.0% | 50 |
| findMany AND | 0.973ms±0.077 | 0.550ms±0.043 | 0.713ms | ~1.00x | ≈ | 26.8% | 50 |
| findMany OR | 7.35ms±0.505 | 4.16ms±0.242 | 5.12ms | 1.77x1.23x D | *** | 20.6% | 50 |
| findMany NOT | 0.505ms±0.102 | 0.273ms±0.017 | 0.521ms | ~1.00x | ≈ | 21.2% | 50 |
| findMany orderBy | 3.11ms±0.101 | 1.12ms±0.072 | 1.32ms | 2.78x1.18x D | *** | 24.9% | 50 |
| findMany pagination | 0.167ms±0.0100 | 0.135ms±0.013 | 0.246ms | ~1.00x | ≈ | 31.6% | 50 |
| findMany select | 0.117ms±0.138 | 0.119ms±0.0083 | 0.101ms | ~1.00x | ≈ | 23.5% | 50 |
| findMany relation some | 0.543ms±0.025 | 0.389ms±0.019 | — | ~1.00x | ≈ | 16.4% | 50 |
| findMany relation every | 0.551ms±0.0078 | 0.388ms±0.0069 | — | ~1.00x | ≈ | 6.3% | 50 |
| findMany relation none | 10.52ms±0.391 | 8.40ms±0.373 | — | 1.25x | *** | 16.8% | 50 |
| findMany nested relation | 0.558ms±0.011 | 0.371ms±0.0069 | — | ~1.00x | ≈ | 6.7% | 50 |
| findMany complex | 0.769ms±0.020 | 0.451ms±0.0089 | 0.584ms | ~1.00x | ≈ | 7.1% | 50 |
| findFirst | 0.135ms±0.0072 | 0.101ms±0.0039 | 0.195ms | ~1.00x | ≈ | 13.3% | 50 |
| findFirst skip | 0.110ms±0.0072 | 0.077ms±0.0033 | 0.151ms | ~1.00x | ≈ | 15.7% | 50 |
| findUnique id | 0.103ms±0.0028 | 0.065ms±0.0014 | 0.127ms | ~1.00x | ≈ | 8.2% | 50 |
| findUnique email | 0.099ms±0.0025 | 0.066ms±0.0028 | 0.125ms | ~1.00x | ≈ | 14.9% | 50 |
| count | 0.081ms±0.0039 | 0.062ms±0.0019 | 0.061ms | ~1.00x | ≈ | 11.1% | 50 |
| count where | 0.381ms±0.0086 | 0.241ms±0.0036 | 0.273ms | ~1.00x | ≈ | 5.5% | 50 |
| aggregate count | 0.178ms±0.0033 | 0.148ms±0.0025 | — | ~1.00x | ≈ | 5.9% | 50 |
| aggregate sum/avg | 0.268ms±0.0050 | 0.250ms±0.0033 | — | ~1.00x | ≈ | 4.6% | 50 |
| aggregate where | 0.369ms±0.0039 | 0.237ms±0.0033 | — | ~1.00x | ≈ | 5.2% | 50 |
| aggregate min/max | 0.263ms±0.0039 | 0.252ms±0.0036 | — | ~1.00x | ≈ | 5.1% | 50 |
| aggregate complete | 0.331ms±0.011 | 0.294ms±0.065 | — | ~1.00x | ≈ | 70.0% | 50 |
| groupBy | 0.346ms±0.0061 | 0.337ms±0.0047 | — | ~1.00x | ≈ | 5.1% | 50 |
| groupBy count | 0.367ms±0.0047 | 0.355ms±0.0047 | — | ~1.00x | ≈ | 4.8% | 50 |
| groupBy multi | 0.463ms±0.0091 | 0.442ms±0.010 | — | ~1.00x | ≈ | 8.1% | 50 |
| groupBy having | 0.407ms±0.017 | 0.379ms±0.013 | — | ~1.00x | ≈ | 11.7% | 50 |
| groupBy + where | 0.393ms±0.016 | 0.257ms±0.0064 | — | ~1.00x | ≈ | 8.6% | 50 |
| _count via include | 0.564ms±0.013 | 0.484ms±0.0097 | — | ~1.00x | ≈ | 7.1% | 50 |
| _count via include + relations | 1.19ms±0.089 | 0.657ms±0.016 | — | ~1.00x | ≈ | 8.8% | 50 |
| groupBy aggregates | 0.462ms±0.013 | 0.455ms±0.0075 | — | ~1.00x | ≈ | 5.9% | 50 |
| groupBy min/max | 0.454ms±0.0050 | 0.446ms±0.0058 | — | ~1.00x | ≈ | 4.8% | 50 |
| include list + nested to-one | 0.967ms±0.060 | 0.339ms±0.014 | — | ~1.00x | ≈ | 14.2% | 50 |
| include list + nullable to-one | 1.33ms±0.110 | 1.64ms±0.096 | — | ~1.00x | ≈ | 20.4% | 50 |
| include posts | 1.24ms±0.160 | 1.21ms±0.116 | 2.31ms | ~1.00x | ≈ | 30.5% | 50 |
| include profile | 0.373ms±0.031 | 0.287ms±0.039 | 0.519ms | ~1.00x | ≈ | 38.7% | 50 |
| include 3 levels | 2.78ms±0.435 | 2.80ms±0.203 | 3.36ms | ~1.00x | ≈ | 29.4% | 50 |
| include 4 levels | 1.64ms±0.609 | 1.36ms±0.245 | 1.83ms | ~1.00x | ≈ | 47.0% | 50 |
| include + where | 1.84ms±0.089 | 1.76ms±0.172 | 4.45ms | ~1.00x | ≈ | 34.6% | 50 |
| include + select nested | 0.957ms±0.165 | 1.02ms±0.161 | 2.90ms | ~1.00x | ≈ | 43.0% | 50 |
| findMany startsWith | 0.127ms±0.011 | 0.097ms±0.0061 | 0.194ms | ~1.00x | ≈ | 21.8% | 50 |
| findMany endsWith | 0.260ms±0.0094 | 0.189ms±0.080 | 0.295ms | ~1.00x | ≈ | 119.6% | 50 |
| findMany NOT contains | 0.225ms±0.0058 | 0.165ms±0.0030 | 0.242ms | ~1.00x | ≈ | 6.3% | 50 |
| findMany LIKE | 0.090ms±0.0061 | 0.061ms±0.0042 | 0.121ms | ~1.00x | ≈ | 24.6% | 50 |
| findMany < | 11.95ms±1.04 | 6.55ms±0.246 | 8.71ms | 1.82x1.33x D | *** | 13.2% | 50 |
| findMany <= | 12.08ms±1.58 | 6.74ms±0.432 | 8.73ms | 1.79x1.30x D | *** | 21.8% | 50 |
| findMany > | 7.81ms±0.481 | 4.60ms±0.239 | 5.86ms | 1.70x1.27x D | *** | 18.7% | 50 |
| findMany NOT IN | 0.358ms±0.077 | 0.226ms±0.013 | 0.391ms | ~1.00x | ≈ | 19.2% | 50 |
| findMany isNot null | 0.283ms±0.012 | 0.229ms±0.0094 | 0.253ms | ~1.00x | ≈ | 15.5% | 50 |
| orderBy multi-field | 1.88ms±0.042 | 0.522ms±0.071 | 0.590ms | 3.60x1.13x D | *** | 46.1% | 50 |
| orderBy relation to-one | 1.69ms±0.021 | 1.29ms±0.031 | — | ~1.00x | ≈ | 8.5% | 50 |
| orderBy relation + scalar | 2.69ms±0.218 | 2.05ms±0.176 | — | ~1.00x | ≈ | 30.7% | 50 |
| orderBy nullable relation | 1.59ms±0.198 | 1.15ms±0.027 | — | ~1.00x | ≈ | 8.3% | 50 |
| orderBy deep relation | 1.91ms±0.018 | 1.50ms±0.013 | — | ~1.00x | ≈ | 3.1% | 50 |
| orderBy deep relation + scalar | 2.33ms±0.124 | 1.90ms±0.085 | — | ~1.00x | ≈ | 14.8% | 50 |
| distinct status | 7.76ms±0.096 | 1.30ms±0.091 | — | 5.98x | *** | 24.1% | 50 |
| distinct multi | 11.01ms±0.071 | 2.47ms±0.035 | — | 4.45x | *** | 5.1% | 50 |
| cursor composite tuple | 1.45ms±0.016 | 1.13ms±0.018 | — | ~1.00x | ≈ | 5.7% | 50 |
| cursor composite desc | 1.59ms±0.0100 | 1.27ms±0.0100 | — | ~1.00x | ≈ | 2.8% | 50 |
| cursor prefix of orderBy | 1.53ms±0.251 | 1.17ms±0.167 | — | ~1.00x | ≈ | 40.3% | 50 |
| select + include | 0.619ms±0.015 | 0.206ms±0.013 | 0.370ms | ~1.00x | ≈ | 21.4% | 50 |
| _count relation | 0.581ms±0.0050 | 0.596ms±0.0055 | — | ~1.00x | ≈ | 3.4% | 50 |
| _count multi-relation | 0.193ms±0.0069 | 0.183ms±0.0044 | — | ~1.00x | ≈ | 8.4% | 50 |
| _count inside include | 0.910ms±0.020 | 0.633ms±0.013 | — | ~1.00x | ≈ | 7.3% | 50 |
| _count inside nested select | 1.37ms±0.020 | 1.18ms±0.017 | — | ~1.00x | ≈ | 5.1% | 50 |
| _count deep include | 1.52ms±0.015 | 1.20ms±0.020 | — | ~1.00x | ≈ | 5.9% | 50 |
| ILIKE special chars | 0.148ms±0.0053 | 0.120ms±0.0042 | — | ~1.00x | ≈ | 11.8% | 50 |
| LIKE case sensitive | 0.117ms±0.0028 | 0.087ms±0.0019 | — | ~1.00x | ≈ | 7.4% | 50 |
| findMany Date range | 1.28ms±0.012 | 0.139ms±0.032 | 0.549ms | 9.27x3.96x D | *** | 62.7% | 50 |
| count Date range | 0.389ms±0.0064 | 0.349ms±0.0067 | 0.409ms | ~1.00x | ≈ | 6.9% | 50 |
| findMany Date gte | 0.169ms±0.0039 | 0.130ms±0.0028 | 0.227ms | ~1.00x | ≈ | 7.8% | 50 |
| depth-1 low-fan | 0.199ms±0.0050 | 0.133ms±0.0036 | — | ~1.00x | ≈ | 9.8% | 50 |
| depth-1 mid-fan | 0.997ms±0.103 | 0.915ms±0.073 | — | ~1.00x | ≈ | 27.5% | 50 |
| depth-1 high-fan | 0.904ms±0.102 | 0.890ms±0.109 | — | ~1.00x | ≈ | 41.3% | 50 |
| depth-1 wide | 0.857ms±0.091 | 0.925ms±0.019 | — | ~1.00x | ≈ | 7.4% | 50 |
| depth-1 unbound | 17.36ms±0.533 | 9.64ms±0.963 | — | 1.80x | *** | 31.6% | 50 |
| depth-2 | 2.64ms±0.122 | 2.78ms±0.226 | — | ~1.00x | ≈ | 28.5% | 50 |
| depth-2 paginated Project→tasks | 0.991ms±0.075 | 1.17ms±0.112 | — | ~1.00x | ≈ | 31.1% | 50 |
| depth-2 high-fan | 1.31ms±0.145 | 1.32ms±0.096 | — | ~1.00x | ≈ | 22.5% | 50 |
| depth-2 wide | 2.47ms±0.216 | 2.45ms±0.193 | — | ~1.00x | ≈ | 25.7% | 50 |
| depth-2 unbound | 28.05ms±0.484 | 15.71ms±0.461 | — | 1.79x | *** | 10.5% | 50 |
| depth-3 unbound | 8.51ms±0.281 | 7.07ms±0.491 | — | 1.20x | *** | 24.1% | 50 |
| depth-3 paginated | 1.68ms±0.183 | 1.64ms±0.160 | — | ~1.00x | ≈ | 31.7% | 50 |
| depth-4 unbound | 6.55ms±0.301 | 6.09ms±0.342 | — | ~1.00x | ≈ | 19.7% | 50 |
| depth-4 paginated | 1.43ms±0.162 | 1.18ms±0.192 | — | ~1.00x | ≈ | 47.1% | 50 |
| findFirst depth-2 | 0.987ms±0.094 | 0.971ms±0.019 | — | ~1.00x | ≈ | 7.1% | 50 |
| findUnique depth-2 Project→tasks→comment | 1.53ms±0.135 | 1.39ms±0.062 | — | ~1.00x | ≈ | 15.8% | 50 |
| complex nested select | 3.37ms±0.296 | 2.05ms±0.185 | — | 1.64x | *** | 27.8% | 50 |
| ultra deep query | 12.44ms±0.689 | 7.71ms±0.293 | — | 1.61x | *** | 13.2% | 50 |
| transaction: (3 operations) | 10.90ms±0.134 | 9.07ms±0.081 | — | 1.20x | *** | 3.2% | 50 |
| টেস্ট | Prisma | prisma-sql | Drizzle | গতিবৃদ্ধি | তাৎপর্য | CV% | n |
|---|---|---|---|---|---|---|---|
| findMany basic | 0.449ms±0.019 | 0.070ms±0.0083 | 0.116ms | ~1.00x | ≈ | 37.1% | 50 |
| findMany where = | 0.380ms±0.0075 | 0.055ms±0.0025 | 0.093ms | ~1.00x | ≈ | 15.4% | 50 |
| findMany where >= | 13.30ms±0.272 | 1.33ms±0.039 | 2.14ms | 10.03x1.61x D | *** | 10.3% | 50 |
| findMany where IN | 0.432ms±0.012 | 0.063ms±0.0033 | 0.114ms | ~1.00x | ≈ | 18.2% | 50 |
| findMany where null | 0.167ms±0.0047 | 0.025ms±0.0030 | 0.057ms | ~1.00x | ≈ | 37.9% | 50 |
| findMany AND | 1.55ms±0.141 | 0.302ms±0.041 | 0.424ms | 5.12x1.40x D | *** | 42.4% | 50 |
| findMany OR | 10.21ms±0.128 | 1.12ms±0.023 | 1.80ms | 9.12x1.61x D | *** | 7.5% | 50 |
| findMany NOT | 0.436ms±0.017 | 0.055ms±0.0033 | 0.103ms | ~1.00x | ≈ | 20.5% | 50 |
| findMany orderBy | 2.37ms±0.033 | 1.83ms±0.021 | 1.88ms | ~1.00x | ≈ | 4.1% | 50 |
| findMany pagination | 0.147ms±0.012 | 0.037ms±0.0028 | 0.066ms | ~1.00x | ≈ | 24.7% | 50 |
| findMany select | 0.173ms±0.0044 | 0.047ms±0.0019 | 0.041ms | ~1.00x | ≈ | 15.2% | 50 |
| findMany relation some | 4.56ms±0.020 | 0.446ms±0.0094 | — | 10.21x | *** | 7.5% | 50 |
| findMany relation every | 9.74ms±0.108 | 6.35ms±0.059 | — | 1.53x | *** | 3.3% | 50 |
| findMany relation none | 169.69ms±3.84 | 2.81ms±0.108 | — | 60.47x | *** | 6.0% | 10 |
| findMany nested relation | 1.04ms±0.018 | 0.316ms±0.022 | — | ~1.00x | ≈ | 23.5% | 50 |
| findMany complex | 0.814ms±0.084 | 0.405ms±0.0086 | 0.454ms | ~1.00x | ≈ | 7.4% | 50 |
| findFirst | 0.163ms±0.021 | 0.035ms±0.0072 | 0.074ms | ~1.00x | ≈ | 59.4% | 50 |
| findFirst skip | 0.184ms±0.126 | 0.036ms±0.0083 | 0.081ms | ~1.00x | ≈ | 66.4% | 50 |
| findUnique id | 0.134ms±0.0033 | 0.032ms±0.0017 | 0.059ms | ~1.00x | ≈ | 17.1% | 50 |
| findUnique email | 0.123ms±0.0017 | 0.029ms±0.0008 | 0.056ms | ~1.00x | ≈ | 10.5% | 50 |
| count | 0.068ms±0.0019 | 0.016ms±0.0008 | 0.019ms | ~1.00x | ≈ | 18.3% | 50 |
| count where | 0.268ms±0.0025 | 0.164ms±0.0019 | 0.169ms | ~1.00x | ≈ | 4.2% | 50 |
| _count via include | 0.537ms±0.0067 | 0.232ms±0.0061 | — | ~1.00x | ≈ | 9.4% | 50 |
| _count via include + relations | 1.06ms±0.0055 | 0.276ms±0.0055 | — | ~1.00x | ≈ | 7.2% | 50 |
| aggregate count | 0.144ms±0.0044 | 0.027ms±0.0017 | — | ~1.00x | ≈ | 20.4% | 50 |
| aggregate sum/avg | 0.274ms±0.0022 | 0.168ms±0.0019 | — | ~1.00x | ≈ | 4.1% | 50 |
| aggregate where | 0.262ms±0.0025 | 0.166ms±0.0030 | — | ~1.00x | ≈ | 6.5% | 50 |
| aggregate min/max | 0.306ms±0.0022 | 0.175ms±0.0025 | — | ~1.00x | ≈ | 5.1% | 50 |
| aggregate complete | 0.390ms±0.0025 | 0.234ms±0.0028 | — | ~1.00x | ≈ | 4.4% | 50 |
| groupBy | 0.572ms±0.0089 | 0.454ms±0.0061 | — | ~1.00x | ≈ | 4.8% | 50 |
| groupBy count | 0.567ms±0.0061 | 0.453ms±0.0047 | — | ~1.00x | ≈ | 3.8% | 50 |
| groupBy multi | 1.17ms±0.0072 | 0.971ms±0.0075 | — | ~1.00x | ≈ | 2.8% | 50 |
| groupBy having | 0.635ms±0.0091 | 0.485ms±0.0047 | — | ~1.00x | ≈ | 3.5% | 50 |
| groupBy + where | 0.325ms±0.065 | 0.204ms±0.0036 | — | ~1.00x | ≈ | 6.2% | 50 |
| groupBy aggregates | 0.703ms±0.0078 | 0.578ms±0.0044 | — | ~1.00x | ≈ | 2.8% | 50 |
| groupBy min/max | 0.718ms±0.0055 | 0.583ms±0.0036 | — | ~1.00x | ≈ | 2.2% | 50 |
| include posts | 2.00ms±0.041 | 0.421ms±0.021 | 1.34ms | 4.75x3.18x D | *** | 16.9% | 50 |
| include profile | 0.333ms±0.0097 | 0.066ms±0.0022 | 0.191ms | ~1.00x | ≈ | 11.9% | 50 |
| include 3 levels | 1.11ms±0.032 | 0.642ms±0.0064 | 0.817ms | ~1.00x | ≈ | 3.6% | 50 |
| include 4 levels | 1.14ms±0.0075 | 0.423ms±0.0050 | 0.634ms | ~1.00x | ≈ | 4.1% | 50 |
| include + where | 0.777ms±0.021 | 0.289ms±0.0058 | 0.271ms | ~1.00x | ≈ | 7.1% | 50 |
| include + select nested | 0.778ms±0.026 | 0.317ms±0.0067 | 0.953ms | ~1.00x | ≈ | 7.5% | 50 |
| findMany startsWith | 0.157ms±0.0064 | 0.035ms±0.0014 | 0.059ms | ~1.00x | ≈ | 14.2% | 50 |
| findMany endsWith | 0.459ms±0.0064 | 0.067ms±0.0022 | 0.106ms | ~1.00x | ≈ | 11.1% | 50 |
| findMany NOT contains | 0.455ms±0.058 | 0.054ms±0.0019 | 0.095ms | ~1.00x | ≈ | 11.6% | 50 |
| findMany LIKE | 0.156ms±0.0022 | 0.034ms±0.0017 | 0.057ms | ~1.00x | ≈ | 17.2% | 50 |
| findMany < | 21.45ms±0.104 | 2.21ms±0.316 | 3.56ms | 9.69x1.61x D | *** | 41.4% | 50 |
| findMany <= | 22.25ms±0.096 | 2.23ms±0.235 | 3.69ms | 9.96x1.65x D | *** | 33.3% | 50 |
| findMany > | 11.74ms±0.116 | 1.15ms±0.161 | 1.92ms | 10.21x1.67x D | *** | 45.5% | 50 |
| findMany NOT IN | 0.444ms±0.014 | 0.058ms±0.011 | 0.115ms | ~1.00x | ≈ | 56.6% | 50 |
| findMany isNot null | 0.426ms±0.0055 | 0.051ms±0.0017 | 0.093ms | ~1.00x | ≈ | 11.6% | 50 |
| orderBy multi-field | 0.671ms±0.069 | 0.350ms±0.0064 | 0.402ms | ~1.00x | ≈ | 6.5% | 50 |
| orderBy relation to-one | 0.641ms±0.0055 | 0.319ms±0.0086 | — | ~1.00x | ≈ | 9.4% | 50 |
| orderBy relation + scalar | 0.714ms±0.0055 | 0.391ms±0.0039 | — | ~1.00x | ≈ | 3.7% | 50 |
| orderBy nullable relation | 0.608ms±0.0069 | 0.321ms±0.0025 | — | ~1.00x | ≈ | 2.7% | 50 |
| orderBy deep relation | 0.710ms±0.0086 | 0.380ms±0.0044 | — | ~1.00x | ≈ | 4.3% | 50 |
| orderBy deep relation + scalar | 1.10ms±0.010 | 0.694ms±0.0078 | — | ~1.00x | ≈ | 4.0% | 50 |
| distinct status | 10.99ms±0.072 | 4.09ms±0.035 | — | 2.68x | *** | 3.0% | 50 |
| distinct multi | 12.12ms±0.092 | 4.96ms±0.013 | — | 2.44x | *** | 1.0% | 50 |
| select + include | 0.537ms±0.0061 | 0.066ms±0.0028 | 0.133ms | ~1.00x | ≈ | 14.1% | 50 |
| _count relation | 0.611ms±0.0061 | 0.353ms±0.0039 | — | ~1.00x | ≈ | 3.9% | 50 |
| _count multi-relation | 0.132ms±0.0061 | 0.045ms±0.0036 | — | ~1.00x | ≈ | 25.1% | 50 |
| _count inside include | 0.861ms±0.0078 | 0.341ms±0.0058 | — | ~1.00x | ≈ | 6.1% | 50 |
| _count inside nested select | 1.54ms±0.010 | 0.587ms±0.0072 | — | ~1.00x | ≈ | 4.5% | 50 |
| _count deep include | 1.33ms±0.0083 | 0.730ms±0.0089 | — | ~1.00x | ≈ | 4.3% | 50 |
| findMany Date range | 0.259ms±0.0042 | 0.051ms±0.0014 | 0.230ms | ~1.00x | ≈ | 9.3% | 50 |
| count Date range | 0.303ms±0.0050 | 0.180ms±0.0025 | 0.182ms | ~1.00x | ≈ | 5.1% | 50 |
| findMany Date gte | 0.242ms±0.0033 | 0.049ms±0.0019 | 0.102ms | ~1.00x | ≈ | 13.1% | 50 |
| depth-1 low-fan Project→labels | 0.257ms±0.0067 | 0.069ms±0.0042 | — | ~1.00x | ≈ | 19.7% | 50 |
| depth-1 mid-fan Project→tasks | 1.91ms±0.022 | 0.367ms±0.0083 | — | 5.21x | *** | 8.0% | 50 |
| depth-1 high-fan User→assignedTasks | 1.65ms±0.062 | 0.332ms±0.0086 | — | 4.96x | *** | 9.2% | 50 |
| depth-1 wide | 1.43ms±0.053 | 0.337ms±0.0061 | — | 4.25x | *** | 6.6% | 50 |
| depth-1 no-limit Project→tasks | 33.39ms±0.407 | 3.56ms±0.378 | — | 9.39x | *** | 34.4% | 50 |
| depth-2 | 1.77ms±0.045 | 0.471ms±0.012 | — | 3.76x | *** | 9.4% | 50 |
| depth-2 paginated | 0.896ms±0.0086 | 0.663ms±0.0067 | — | ~1.00x | ≈ | 3.6% | 50 |
| depth-2 high-fan | 1.56ms±0.034 | 0.416ms±0.012 | — | 3.76x | *** | 9.8% | 50 |
| depth-2 wide+attach+activity | 1.86ms±0.031 | 0.532ms±0.013 | — | 3.49x | *** | 8.4% | 50 |
| depth-2 no-limit | 49.34ms±0.687 | 6.75ms±0.300 | — | 7.31x | *** | 7.2% | 10 |
| depth-3 | 9.70ms±0.121 | 1.55ms±0.032 | — | 6.25x | *** | 7.3% | 50 |
| depth-3 paginated | 1.07ms±0.0094 | 0.604ms±0.0067 | — | ~1.00x | ≈ | 4.0% | 50 |
| depth-4 | 5.66ms±0.217 | 1.04ms±0.038 | — | 5.44x | *** | 12.8% | 50 |
| depth-4 paginated | 1.12ms±0.079 | 0.418ms±0.0067 | — | ~1.00x | ≈ | 5.6% | 50 |
| findFirst depth-2 | 0.906ms±0.0080 | 0.285ms±0.0083 | — | ~1.00x | ≈ | 10.2% | 50 |
| findUnique depth-2 | 0.927ms±0.051 | 0.290ms±0.0083 | — | ~1.00x | ≈ | 9.9% | 50 |
| টেস্ট | Prisma | prisma-sql | Drizzle | গতিবৃদ্ধি | তাৎপর্য | CV% | n |
|---|---|---|---|---|---|---|---|
| findMany basic | 0.147ms±0.0033 | 0.056ms±0.0030 | 0.105ms | ~1.00x | ≈ | 17.1% | 50 |
| findMany where = | 0.123ms±0.0025 | 0.051ms±0.0011 | 0.090ms | ~1.00x | ≈ | 6.8% | 50 |
| findMany where >= | 3.70ms±0.269 | 1.21ms±0.017 | 2.15ms | 3.05x1.77x D | *** | 5.0% | 50 |
| findMany where IN | 0.140ms±0.251 | 0.057ms±0.0028 | 0.101ms | ~1.00x | ≈ | 17.1% | 50 |
| findMany where null | 0.061ms±0.0019 | 0.024ms±0.0008 | 0.050ms | ~1.00x | ≈ | 12.3% | 50 |
| findMany AND | 0.566ms±0.169 | 0.297ms±0.0055 | 0.410ms | ~1.00x | ≈ | 6.8% | 50 |
| findMany OR | 3.08ms±0.218 | 1.09ms±0.186 | 1.86ms | 2.82x1.70x D | *** | 53.4% | 50 |
| findMany NOT | 0.147ms±0.239 | 0.058ms±0.0036 | 0.123ms | ~1.00x | ≈ | 21.1% | 50 |
| findMany orderBy | 1.72ms±0.011 | 1.67ms±0.0097 | 1.71ms | ~1.00x | ≈ | 2.1% | 50 |
| findMany pagination | 0.065ms±0.0025 | 0.037ms±0.012 | 0.060ms | ~1.00x | ≈ | 93.4% | 50 |
| findMany select | 0.059ms±0.0011 | 0.046ms±0.0014 | 0.039ms | ~1.00x | ≈ | 10.4% | 50 |
| findMany relation some | 0.383ms±0.012 | 0.430ms±0.100 | — | ~1.00x | ≈ | 74.8% | 50 |
| findMany relation every | 9.48ms±0.212 | 6.42ms±0.085 | — | 1.48x | *** | 4.7% | 50 |
| findMany relation none | 126.50ms±8.87 | 3.10ms±0.084 | — | 40.78x | *** | 4.3% | 10 |
| findMany nested relation | 0.369ms±0.012 | 0.304ms±0.0064 | — | ~1.00x | ≈ | 7.3% | 50 |
| findMany complex | 0.549ms±0.156 | 0.509ms±0.103 | 0.530ms | ~1.00x | ≈ | 55.5% | 50 |
| findFirst | 0.065ms±0.0069 | 0.027ms±0.0014 | 0.060ms | ~1.00x | ≈ | 18.7% | 50 |
| findFirst skip | 0.075ms±0.0080 | 0.029ms±0.0042 | 0.076ms | ~1.00x | ≈ | 43.6% | 50 |
| findUnique id | 0.063ms±0.0025 | 0.023ms±0.0006 | 0.051ms | ~1.00x | ≈ | 10.0% | 50 |
| findUnique email | 0.062ms±0.0030 | 0.024ms±0.0008 | 0.052ms | ~1.00x | ≈ | 13.8% | 50 |
| count | 0.033ms±0.0014 | 0.014ms±0.0003 | 0.014ms | ~1.00x | ≈ | 10.2% | 50 |
| count where | 0.201ms±0.0058 | 0.166ms±0.0025 | 0.168ms | ~1.00x | ≈ | 5.1% | 50 |
| _count via include | 0.416ms±0.0089 | 0.224ms±0.0086 | — | ~1.00x | ≈ | 13.5% | 50 |
| _count via include + relations | 0.759ms±0.016 | 0.269ms±0.011 | — | ~1.00x | ≈ | 14.1% | 50 |
| aggregate count | 0.074ms±0.146 | 0.024ms±0.0022 | — | ~1.00x | ≈ | 28.5% | 50 |
| aggregate sum/avg | 0.259ms±0.142 | 0.195ms±0.134 | — | ~1.00x | ≈ | 120.6% | 50 |
| aggregate where | 0.201ms±0.073 | 0.174ms±0.057 | — | ~1.00x | ≈ | 86.9% | 50 |
| aggregate min/max | 0.206ms±0.0039 | 0.172ms±0.0030 | — | ~1.00x | ≈ | 6.3% | 50 |
| aggregate complete | 0.274ms±0.0097 | 0.238ms±0.0033 | — | ~1.00x | ≈ | 5.1% | 50 |
| groupBy | 0.475ms±0.0058 | 0.447ms±0.0069 | — | ~1.00x | ≈ | 5.5% | 50 |
| groupBy count | 0.494ms±0.016 | 0.467ms±0.0097 | — | ~1.00x | ≈ | 7.3% | 50 |
| groupBy multi | 0.987ms±0.020 | 0.973ms±0.019 | — | ~1.00x | ≈ | 6.9% | 50 |
| groupBy having | 0.503ms±0.0047 | 0.478ms±0.0044 | — | ~1.00x | ≈ | 3.3% | 50 |
| groupBy + where | 0.219ms±0.0014 | 0.198ms±0.0011 | — | ~1.00x | ≈ | 2.2% | 50 |
| groupBy aggregates | 0.577ms±0.0055 | 0.552ms±0.0033 | — | ~1.00x | ≈ | 2.2% | 50 |
| groupBy min/max | 0.584ms±0.0067 | 0.561ms±0.0083 | — | ~1.00x | ≈ | 5.3% | 50 |
| include posts | 0.834ms±0.109 | 0.435ms±0.029 | 1.35ms | ~1.00x | ≈ | 22.4% | 50 |
| include profile | 0.138ms±0.128 | 0.065ms±0.0044 | 0.194ms | ~1.00x | ≈ | 22.1% | 50 |
| include 3 levels | 0.609ms±0.148 | 0.566ms±0.014 | 0.762ms | ~1.00x | ≈ | 8.7% | 50 |
| include 4 levels | 0.682ms±0.104 | 0.424ms±0.027 | 0.641ms | ~1.00x | ≈ | 21.2% | 50 |
| include + where | 0.399ms±0.0053 | 0.271ms±0.0078 | 0.264ms | ~1.00x | ≈ | 9.9% | 50 |
| include + select nested | 0.344ms±0.0072 | 0.302ms±0.085 | 0.971ms | ~1.00x | ≈ | 87.0% | 50 |
| findMany startsWith | 0.056ms±0.0011 | 0.033ms±0.0003 | 0.055ms | ~1.00x | ≈ | 3.9% | 50 |
| findMany endsWith | 0.143ms±0.0036 | 0.069ms±0.0047 | 0.118ms | ~1.00x | ≈ | 23.5% | 50 |
| findMany NOT contains | 0.142ms±0.0014 | 0.057ms±0.0008 | 0.099ms | ~1.00x | ≈ | 4.8% | 50 |
| findMany LIKE | 0.055ms±0.0014 | 0.032ms±0.0003 | 0.052ms | ~1.00x | ≈ | 4.4% | 50 |
| findMany < | 6.81ms±4.28 | 2.47ms±0.428 | 3.96ms | 2.75x1.60x D | ** | 52.3% | 50 |
| findMany <= | 6.86ms±0.959 | 2.48ms±0.433 | 4.11ms | 2.76x1.66x D | *** | 48.9% | 50 |
| findMany > | 3.85ms±0.589 | 1.35ms±0.229 | 2.19ms | 2.85x1.62x D | *** | 50.0% | 50 |
| findMany NOT IN | 0.142ms±0.0036 | 0.056ms±0.0061 | 0.103ms | ~1.00x | ≈ | 35.5% | 50 |
| findMany isNot null | 0.135ms±0.0028 | 0.054ms±0.0030 | 0.096ms | ~1.00x | ≈ | 20.0% | 50 |
| orderBy multi-field | 0.437ms±0.0075 | 0.366ms±0.0067 | 0.421ms | ~1.00x | ≈ | 6.5% | 50 |
| orderBy relation to-one | 0.392ms±0.0050 | 0.327ms±0.0086 | — | ~1.00x | ≈ | 9.3% | 50 |
| orderBy relation + scalar | 0.460ms±0.0028 | 0.398ms±0.0033 | — | ~1.00x | ≈ | 2.9% | 50 |
| orderBy nullable relation | 0.394ms±0.015 | 0.335ms±0.016 | — | ~1.00x | ≈ | 16.3% | 50 |
| orderBy deep relation | 2.14ms±1.01 | 1.59ms±1.77 | — | ~1.00x | ≈ | 178.6% | 50 |
| orderBy deep relation + scalar | 0.809ms±0.030 | 0.721ms±0.054 | — | ~1.00x | ≈ | 25.0% | 50 |
| distinct status | 6.38ms±2.53 | 4.55ms±0.932 | — | 1.40x | ** | 58.1% | 50 |
| distinct multi | 7.42ms±0.707 | 5.78ms±0.551 | — | 1.28x | *** | 30.9% | 50 |
| select + include | 0.300ms±0.0094 | 0.063ms±0.0083 | 0.132ms | ~1.00x | ≈ | 41.9% | 50 |
| _count relation | 0.445ms±0.059 | 0.396ms±0.053 | — | ~1.00x | ≈ | 41.8% | 50 |
| _count multi-relation | 0.091ms±0.0064 | 0.045ms±0.0006 | — | ~1.00x | ≈ | 5.3% | 50 |
| _count inside include | 0.747ms±0.045 | 0.381ms±0.040 | — | ~1.00x | ≈ | 32.5% | 50 |
| _count inside nested select | 1.43ms±0.058 | 0.694ms±0.068 | — | ~1.00x | ≈ | 31.4% | 50 |
| _count deep include | 1.12ms±0.046 | 0.841ms±0.122 | — | ~1.00x | ≈ | 47.5% | 50 |
| findMany Date range | 0.102ms±0.0055 | 0.054ms±0.0047 | 0.311ms | ~1.00x | ≈ | 29.2% | 50 |
| count Date range | 0.445ms±0.066 | 0.371ms±0.050 | 0.286ms | ~1.00x | ≈ | 42.0% | 50 |
| findMany Date gte | 0.099ms±0.012 | 0.052ms±0.0072 | 0.089ms | ~1.00x | ≈ | 43.8% | 50 |
| depth-1 low-fan Project→labels | 0.120ms±0.014 | 0.067ms±0.0044 | — | ~1.00x | ≈ | 22.6% | 50 |
| depth-1 mid-fan Project→tasks | 0.875ms±0.184 | 0.449ms±0.457 | — | ~1.00x | ≈ | 221.0% | 50 |
| depth-1 high-fan User→assignedTasks | 0.785ms±0.188 | 0.424ms±0.041 | — | ~1.00x | ≈ | 31.4% | 50 |
| depth-1 wide | 0.676ms±0.210 | 0.380ms±0.051 | — | ~1.00x | ≈ | 41.2% | 50 |
| depth-1 no-limit Project→tasks | 13.27ms±1.11 | 4.11ms±0.355 | — | 3.23x | *** | 27.1% | 50 |
| depth-2 | 0.808ms±0.422 | 0.468ms±0.212 | — | ~1.00x | ≈ | 124.7% | 50 |
| depth-2 paginated | 0.552ms±0.038 | 0.653ms±0.020 | — | ~1.00x | ≈ | 10.6% | 50 |
| depth-2 high-fan | 0.724ms±0.032 | 0.426ms±0.128 | — | ~1.00x | ≈ | 88.3% | 50 |
| depth-2 wide+attach+activity | 1.01ms±0.147 | 0.544ms±0.131 | — | ~1.00x | ≈ | 73.6% | 50 |
| depth-2 no-limit | 18.70ms±0.737 | 7.54ms±0.729 | — | 2.48x | *** | 29.4% | 50 |
| depth-3 | 3.63ms±0.429 | 1.54ms±0.348 | — | 2.36x | *** | 66.1% | 50 |
| depth-3 paginated | 1.27ms±0.412 | 0.943ms±0.222 | — | ~1.00x | ≈ | 63.7% | 50 |
| depth-4 | 2.67ms±0.426 | 1.23ms±0.214 | — | 2.16x | *** | 53.9% | 50 |
| depth-4 paginated | 0.669ms±0.135 | 0.420ms±0.027 | — | ~1.00x | ≈ | 20.9% | 50 |
| findFirst depth-2 | 0.508ms±0.149 | 0.296ms±0.019 | — | ~1.00x | ≈ | 20.4% | 50 |
| findUnique depth-2 | 0.496ms±0.096 | 0.287ms±0.015 | — | ~1.00x | ≈ | 17.4% | 50 |
| টেস্ট | Prisma | prisma-sql | Drizzle | গতিবৃদ্ধি | তাৎপর্য | CV% | n |
|---|---|---|---|---|---|---|---|
| findMany basic | 0.450ms±0.927 | 0.151ms±0.048 | 0.268ms | ~1.00x | ≈ | 72.4% | 50 |
| findMany where = | 0.244ms±0.070 | 0.114ms±0.040 | 0.170ms | ~1.00x | ≈ | 80.5% | 50 |
| findMany where >= | 7.43ms±1.10 | 3.18ms±1.15 | 4.17ms | 2.34x1.31x D | *** | 98.5% | 50 |
| findMany where IN | 0.284ms±0.065 | 0.117ms±0.041 | 0.169ms | ~1.00x | ≈ | 85.0% | 50 |
| findMany where null | 0.138ms±0.035 | 0.052ms±0.023 | 0.082ms | ~1.00x | ≈ | 90.5% | 50 |
| findMany AND | 1.61ms±0.206 | 0.836ms±0.120 | 0.976ms | ~1.00x | ≈ | 45.8% | 50 |
| findMany OR | 5.29ms±0.590 | 2.24ms±0.382 | 3.25ms | 2.36x1.45x D | *** | 55.5% | 50 |
| findMany NOT | 0.197ms±0.040 | 0.081ms±0.026 | 0.126ms | ~1.00x | ≈ | 76.2% | 50 |
| findMany orderBy | 4.11ms±0.759 | 3.79ms±0.449 | 3.61ms | ~1.00x | ≈ | 40.2% | 50 |
| findMany pagination | 0.539ms±0.297 | 0.394ms±0.171 | 0.369ms | ~1.00x | ≈ | 103.6% | 50 |
| findMany select | 0.252ms±0.121 | 0.223ms±0.086 | 0.126ms | ~1.00x | ≈ | 93.6% | 50 |
| findMany relation some | 1.97ms±0.401 | 1.29ms±0.348 | — | ~1.00x | ≈ | 71.5% | 50 |
| findMany relation every | 15.08ms±4.43 | 10.50ms±1.19 | — | 1.44x | ** | 36.4% | 50 |
| findMany relation none | 178.32ms±7.96 | 6.56ms±2.80 | — | 27.18x | *** | 45.7% | 5 |
| findMany nested relation | 0.507ms±0.094 | 0.399ms±0.042 | — | ~1.00x | ≈ | 34.8% | 50 |
| findMany complex | 1.01ms±0.138 | 0.871ms±0.117 | 0.859ms | ~1.00x | ≈ | 43.3% | 50 |
| findFirst | 0.080ms±0.033 | 0.034ms±0.030 | 0.070ms | ~1.00x | ≈ | 147.4% | 50 |
| findFirst skip | 0.086ms±0.069 | 0.035ms±0.037 | 0.082ms | ~1.00x | ≈ | 154.8% | 50 |
| findUnique id | 0.081ms±0.039 | 0.027ms±0.017 | 0.055ms | ~1.00x | ≈ | 115.3% | 50 |
| findUnique email | 0.075ms±0.039 | 0.027ms±0.031 | 0.054ms | ~1.00x | ≈ | 202.7% | 50 |
| count | 0.037ms±0.0072 | 0.016ms±0.0064 | 0.015ms | ~1.00x | ≈ | 90.1% | 50 |
| count where | 0.427ms±0.070 | 0.278ms±0.052 | 0.253ms | ~1.00x | ≈ | 52.2% | 50 |
| _count via include | 0.745ms±0.105 | 0.382ms±0.091 | — | ~1.00x | ≈ | 58.8% | 50 |
| _count via include + relations | 1.53ms±0.288 | 0.691ms±0.291 | — | ~1.00x | ≈ | 105.5% | 50 |
| aggregate count | 0.076ms±0.014 | 0.026ms±0.011 | — | ~1.00x | ≈ | 112.6% | 50 |
| aggregate sum/avg | 0.246ms±0.052 | 0.189ms±0.037 | — | ~1.00x | ≈ | 55.2% | 50 |
| aggregate where | 0.255ms±0.061 | 0.214ms±0.040 | — | ~1.00x | ≈ | 52.2% | 50 |
| aggregate min/max | 0.680ms±0.165 | 0.393ms±0.106 | — | ~1.00x | ≈ | 69.7% | 50 |
| aggregate complete | 0.568ms±0.292 | 0.391ms±0.095 | — | ~1.00x | ≈ | 62.3% | 50 |
| groupBy | 0.934ms±0.104 | 0.859ms±0.136 | — | ~1.00x | ≈ | 50.0% | 50 |
| groupBy count | 0.874ms±0.100 | 0.794ms±0.102 | — | ~1.00x | ≈ | 41.1% | 50 |
| groupBy multi | 1.74ms±0.119 | 1.53ms±0.141 | — | ~1.00x | ≈ | 31.2% | 50 |
| groupBy having | 0.843ms±0.131 | 0.747ms±0.098 | — | ~1.00x | ≈ | 42.5% | 50 |
| groupBy + where | 0.450ms±0.086 | 0.337ms±0.097 | — | ~1.00x | ≈ | 70.0% | 50 |
| groupBy aggregates | 1.09ms±0.124 | 0.917ms±0.116 | — | ~1.00x | ≈ | 40.4% | 50 |
| groupBy min/max | 1.18ms±0.096 | 0.890ms±0.095 | — | ~1.00x | ≈ | 34.6% | 50 |
| include posts | 1.45ms±0.231 | 0.892ms±0.190 | 2.55ms | ~1.00x | ≈ | 58.1% | 50 |
| include profile | 0.147ms±0.028 | 0.071ms±0.017 | 0.202ms | ~1.00x | ≈ | 65.0% | 50 |
| include 3 levels | 0.920ms±0.250 | 0.778ms±0.081 | 0.915ms | ~1.00x | ≈ | 33.8% | 50 |
| include 4 levels | 0.799ms±0.085 | 0.465ms±0.049 | 0.670ms | ~1.00x | ≈ | 32.9% | 50 |
| include + where | 0.810ms±0.401 | 0.571ms±0.173 | 0.508ms | ~1.00x | ≈ | 73.1% | 50 |
| include + select nested | 0.645ms±0.153 | 0.591ms±0.074 | 1.20ms | ~1.00x | ≈ | 40.9% | 50 |
| findMany startsWith | 0.071ms±0.016 | 0.041ms±0.0069 | 0.066ms | ~1.00x | ≈ | 52.4% | 50 |
| findMany endsWith | 0.252ms±0.096 | 0.132ms±0.134 | 0.184ms | ~1.00x | ≈ | 184.3% | 50 |
| findMany NOT contains | 0.296ms±0.112 | 0.102ms±0.085 | 0.192ms | ~1.00x | ≈ | 145.2% | 50 |
| findMany LIKE | 0.113ms±0.055 | 0.063ms±0.042 | 0.099ms | ~1.00x | ≈ | 106.0% | 50 |
| findMany < | 7.95ms±0.626 | 2.95ms±0.193 | 5.36ms | 2.70x1.82x D | *** | 21.8% | 50 |
| findMany <= | 9.47ms±0.948 | 3.46ms±0.432 | 5.03ms | 2.73x1.45x D | *** | 39.8% | 50 |
| findMany > | 5.61ms±0.633 | 1.98ms±0.501 | 2.93ms | 2.83x1.48x D | *** | 73.5% | 50 |
| findMany NOT IN | 0.231ms±0.235 | 0.086ms±0.026 | 0.132ms | ~1.00x | ≈ | 70.0% | 50 |
| findMany isNot null | 0.183ms±0.062 | 0.079ms±0.035 | 0.115ms | ~1.00x | ≈ | 89.4% | 50 |
| orderBy multi-field | 0.811ms±0.280 | 0.678ms±0.114 | 0.790ms | ~1.00x | ≈ | 48.5% | 50 |
| orderBy relation to-one | 0.628ms±0.173 | 0.517ms±0.128 | — | ~1.00x | ≈ | 63.8% | 50 |
| orderBy relation + scalar | 0.550ms±0.063 | 0.443ms±0.027 | — | ~1.00x | ≈ | 20.6% | 50 |
| orderBy nullable relation | 0.455ms±0.088 | 0.385ms±0.060 | — | ~1.00x | ≈ | 46.8% | 50 |
| orderBy deep relation | 0.500ms±0.083 | 0.434ms±0.055 | — | ~1.00x | ≈ | 37.9% | 50 |
| orderBy deep relation + scalar | 0.937ms±0.108 | 0.767ms±0.088 | — | ~1.00x | ≈ | 36.3% | 50 |
| distinct status | 8.58ms±0.760 | 5.89ms±0.577 | — | 1.46x | *** | 29.9% | 50 |
| distinct multi | 9.94ms±0.660 | 7.19ms±0.539 | — | 1.38x | *** | 24.1% | 50 |
| select + include | 0.497ms±0.076 | 0.125ms±0.034 | 0.202ms | ~1.00x | ≈ | 72.4% | 50 |
| _count relation | 0.725ms±0.129 | 0.533ms±0.111 | — | ~1.00x | ≈ | 58.3% | 50 |
| _count multi-relation | 0.103ms±0.108 | 0.055ms±0.034 | — | ~1.00x | ≈ | 107.3% | 50 |
| _count inside include | 0.963ms±0.118 | 0.501ms±0.096 | — | ~1.00x | ≈ | 57.7% | 50 |
| _count inside nested select | 1.54ms±0.156 | 0.840ms±0.095 | — | ~1.00x | ≈ | 36.7% | 50 |
| _count deep include | 1.39ms±0.118 | 0.976ms±0.066 | — | ~1.00x | ≈ | 23.4% | 50 |
| findMany Date range | 0.099ms±0.060 | 0.054ms±0.042 | 0.316ms | ~1.00x | ≈ | 128.0% | 50 |
| count Date range | 0.478ms±0.157 | 0.410ms±0.109 | 0.338ms | ~1.00x | ≈ | 70.1% | 50 |
| findMany Date gte | 0.091ms±0.0089 | 0.049ms±0.014 | 0.083ms | ~1.00x | ≈ | 76.3% | 50 |
| depth-1 low-fan Project→labels | 0.123ms±0.017 | 0.069ms±0.019 | — | ~1.00x | ≈ | 79.7% | 50 |
| depth-1 mid-fan Project→tasks | 0.871ms±0.203 | 0.437ms±0.087 | — | ~1.00x | ≈ | 54.0% | 50 |
| depth-1 high-fan User→assignedTasks | 1.24ms±0.363 | 0.645ms±0.248 | — | ~1.00x | ≈ | 94.6% | 50 |
| depth-1 wide | 1.63ms±0.453 | 0.938ms±0.145 | — | 1.74x | *** | 50.3% | 50 |
| depth-1 no-limit Project→tasks | 11.69ms±1.15 | 5.10ms±0.731 | — | 2.29x | *** | 40.4% | 50 |
| depth-2 | 0.906ms±0.194 | 0.544ms±0.050 | — | ~1.00x | ≈ | 29.6% | 50 |
| depth-2 paginated | 0.661ms±0.250 | 0.717ms±0.095 | — | ~1.00x | ≈ | 40.5% | 50 |
| depth-2 high-fan | 1.76ms±0.328 | 1.03ms±0.182 | — | ~1.00x | ≈ | 51.6% | 50 |
| depth-2 wide+attach+activity | 2.13ms±0.429 | 1.26ms±0.486 | — | ~1.00x | ≈ | 95.4% | 50 |
| depth-2 no-limit | 23.64ms±2.04 | 12.97ms±1.44 | — | 1.82x | *** | 38.2% | 50 |
| depth-3 | 5.23ms±0.329 | 2.79ms±0.696 | — | 1.88x | *** | 67.4% | 50 |
| depth-3 paginated | 1.45ms±0.246 | 0.967ms±0.099 | — | ~1.00x | ≈ | 33.0% | 50 |
| depth-4 | 3.22ms±0.295 | 1.78ms±0.430 | — | 1.81x | *** | 68.1% | 50 |
| depth-4 paginated | 0.782ms±0.177 | 0.435ms±0.025 | — | ~1.00x | ≈ | 19.1% | 50 |
| findFirst depth-2 | 0.538ms±0.060 | 0.330ms±0.053 | — | ~1.00x | ≈ | 45.5% | 50 |
| findUnique depth-2 | 0.550ms±0.306 | 0.358ms±0.071 | — | ~1.00x | ≈ | 57.1% | 50 |
npm run bench (BENCHMARK_JSON_OUTPUT=1 JSON লেখে)। ফলাফল যায় benchmark-results/summary-.json -এ; v--latest.json থেকে এই পেজের ডেটা আসে।PostgreSQL ও SQLite-এ আমাদের যাচাই করা প্রতিটি Prisma Client ফিচার। রাইট Prisma-তেই থাকে; শেপ সমর্থিত হলে রিড SQL-এ কম্পাইল হয়।
যাচাই করা 73টি ফিচারের মধ্যে 25টি PostgreSQL-এ পুরোপুরি ত্বরান্বিত। 19টি Prisma-এর চেয়ে ভিন্ন ফলাফল দিতে পারে; পূর্ণ ম্যাপে প্রতিটির কারণসহ তালিকা আছে।
| অবস্থা | PostgreSQL | SQLite |
|---|---|---|
| ত্বরান্বিত | 25 | 21 |
| আংশিক | 6 | 6 |
| ফলব্যাক করে | 9 | 7 |
| Prisma-তে চলে | 7 | 7 |
| ভিন্ন হতে পারে | 19 | 17 |
| উপলব্ধ নয় | 2 | 4 |
| শুধু prisma-sql | 5 | 2 |
| Prisma-তে নেই | 0 | 6 |
| যাচাই হয়নি | 0 | 3 |
মডেল মেথড
findMany
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
findFirst
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
LIMIT 1 দিয়ে কম্পাইল হয়। cursor ও নেগেটিভ take উপেক্ষা করা হয়। distinct থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
findUnique
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
a_b: { a, b }-এর মতো কম্পাউন্ড ইউনিক কী থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
findUniqueOrThrow, findFirstOrThrow
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
count
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
select: { _all, field } উপেক্ষা করা হয় এবং অবজেক্টের বদলে একটি সংখ্যা ফেরত আসে। নেগেটিভ take থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
aggregate
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
take, skip, cursor ও orderBy উপেক্ষা করা হয়, তাই মোট মান ভিন্ন হতে পারে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
groupBy
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
by একটি স্ট্রিং হলে ফলব্যাক করে। অ্যাগ্রিগেট অনুযায়ী ক্রম নির্ধারণে ফলব্যাক হওয়ার কথা (যাচাই করা হয়নি)।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
create, createMany, createManyAndReturn
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
রাইট ইন্টারসেপ্ট করা হয় না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
update, updateMany, updateManyAndReturn
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
রাইট ইন্টারসেপ্ট করা হয় না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
upsert, delete, deleteMany
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
রাইট ইন্টারসেপ্ট করা হয় না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
মডেল মেথড
findManyStream, findManyReduceStream
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
Prisma এটি সমর্থন করে; prisma-sql-এ এর কোনো সমতুল্য নেই।
রো স্ট্রিমিং। শুধু PostgreSQL; SQLite-এ এরর থ্রো করে।
Prisma যেখানে সমর্থন করে: না
কুয়েরি অপশন
select
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
স্কেলার, রিলেশন ও _count। অজানা ফিল্ড থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
include
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
গভীরতা, ফ্যান-আউট বা সার্কুলার include-এর সীমা ছাড়ানো কুয়েরি ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
omit (per query)
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
উপেক্ষা করা হয়। বাদ দেওয়া ফিল্ডও ফেরত আসে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
omit (client option)
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
পড়া হয় না। new PrismaClient({ omit })-এ বাদ দেওয়া ফিল্ডও ফেরত আসে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
কুয়েরি অপশন
distinct
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
PostgreSQL DISTINCT ON ব্যবহার করে; orderBy distinct ফিল্ড দিয়ে শুরু না হলে ক্রম ও take ভিন্ন হতে পারে (যাচাই করা হয়নি)। SQLite-এ cursor থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
কুয়েরি অপশন
take, skip
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
Negative take
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
নির্বাচিত স্কেলার ফিল্ডে orderBy লাগে; না থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
cursor
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
কার্সর রো না থাকলে রো ফেরত আসে; Prisma খালি তালিকা ফেরত দেয়। orderBy ছাড়া রোয়ের ক্রম নির্দিষ্ট নয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
relationLoadStrategy
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
ওই ডেটাবেসে Prisma এটি সমর্থন করে না।
উপেক্ষা করা হয়। রিলেশন কীভাবে লোড হবে তা prisma-sql প্ল্যানার ঠিক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL (প্রিভিউ)
কুয়েরি অপশন
_count in select / include
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
ফিল্টার করা কাউন্ট সমর্থিত। রুট _count: true টু-ওয়ান রিলেশনও গুনতে পারে (যাচাই করা হয়নি)।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
Nested where, take, skip
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
Nested orderBy
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
শুধু স্কেলার ফিল্ড। রিলেশন ফিল্ড থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
কুয়েরি অপশন
Nested cursor, distinct
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
প্রতি প্যারেন্টে আলাদাভাবে নয়, সব প্যারেন্টের জন্য একটি ব্যাচড চাইল্ড কুয়েরিতে প্রয়োগ হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ফিল্টার
equals, shorthand equality
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
not
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma-এর মতোই NULL রো বাদ পড়ে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
in, notIn
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
খালি তালিকা Prisma-এর মতোই আচরণ করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
lt, lte, gt, gte
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
null মান থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
contains, startsWith, endsWith
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma-এর মতোই % ও _ এস্কেপ করা হয় না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
mode: 'insensitive'
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
ওই ডেটাবেসে Prisma এটি সমর্থন করে না।
PostgreSQL ILIKE ব্যবহার করে। SQLite-এ, যেখানে Prisma mode প্রত্যাখ্যান করে, prisma-sql এটি গ্রহণ করে এবং LOWER() ব্যবহার করে।
Prisma যেখানে সমর্থন করে: PostgreSQL
ফিল্টার
search (full-text)
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
ওই ডেটাবেসে Prisma এটি সমর্থন করে না।
Prisma যেখানে সমর্থন করে: PostgreSQL (প্রিভিউ)
ফিল্টার
AND, OR, NOT
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma-এর মতোই খালি OR কোনো কিছুর সাথে মেলে না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
some, every, none
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
is, isNot
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
দুটিই দেওয়া হলে isNot বাদ দেওয়া হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
Scalar lists: has, hasSome, hasEvery, isEmpty, equals
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
ওই ডেটাবেসে Prisma এটি সমর্থন করে না।
not শুধু { equals } গ্রহণ করে। isEmpty NULL তালিকাকে খালি হিসেবে ধরে।
Prisma যেখানে সমর্থন করে: PostgreSQL
ফিল্টার
Json path filter { path, equals }
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL
ফিল্টার
Json string_contains, string_starts_with, string_ends_with
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
সবসময় কেস-ইনসেনসিটিভ এবং পুরো JSON টেক্সটের সাথে মেলানো হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL
ফিল্টার
Json array_contains, array_starts_with, array_ends_with
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL
ফিল্টার
DbNull, JsonNull, AnyNull
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ফিল্টারটি বাদ পড়তে পারে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ফিল্টার
Field references (model.fields.x)
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ফিল্টার
Compound unique where
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
null, undefined
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma-এর মতোই undefined এড়িয়ে যাওয়া হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফিল্টার
Decimal and Bytes values
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ফিল্টার
Enum values
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
@map নামে ম্যাপ করা হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্রম নির্ধারণ
Scalar asc / desc
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্রম নির্ধারণ
{ sort, nulls }
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQLite NULLS FIRST / LAST এমুলেট করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্রম নির্ধারণ
Relation field
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
টু-ওয়ান রিলেশন, নেস্টেড।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্রম নির্ধারণ
Relation _count
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্রম নির্ধারণ
_relevance
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
ওই ডেটাবেসে Prisma এটি সমর্থন করে না।
Prisma যেখানে সমর্থন করে: PostgreSQL (প্রিভিউ)
ক্রম নির্ধারণ
groupBy by aggregate
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
SQL বিল্ডার এটি প্রত্যাখ্যান করে এবং কুয়েরিটি Prisma চালায়। একই ফলাফল, কোনো গতিবৃদ্ধি নেই।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ক্রম নির্ধারণ
Optional relation { sort, nulls }
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
prisma-sql-এর যোগ করা টাইপ এক্সটেনশন। অসমর্থিত হলে ফলব্যাক না করে এরর থ্রো করে।
Prisma যেখানে সমর্থন করে: না
অ্যাগ্রিগেট
_count, _sum, _avg, _min, _max
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
অ্যাগ্রিগেট
groupBy having
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
equals, not, gt, gte, lt, lte, in, notIn। অন্য অপারেটর থাকলে ফলব্যাক করে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
অ্যাগ্রিগেট
groupBy take, skip
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
orderBy ছাড়াই গ্রহণ করা হয়; Prisma-তে এটি আবশ্যক।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
অ্যাগ্রিগেট
aggregate take, skip, cursor, orderBy
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
উপেক্ষা করা হয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
অ্যাগ্রিগেট
_count: true result shape
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
{ _all: n } ফেরত দেয়; Prisma n ফেরত দেয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ক্লায়েন্ট API
$transaction(async (tx) => …)
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
বেস ক্লায়েন্টে চলে। কলব্যাকের ভেতরের রিড ত্বরান্বিত হয় না।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্লায়েন্ট API
$transaction([…])
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত রিড Prisma ট্রানজ্যাকশনের বাইরে prisma-sql কানেকশনে চলতে পারে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ক্লায়েন্ট API
$transaction([{ model, method, args }])
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
Prisma এটি সমর্থন করে; prisma-sql-এ এর কোনো সমতুল্য নেই।
আইসোলেশন লেভেল ও টাইমআউটসহ prisma-sql-এর নিজস্ব রূপ। শুধু PostgreSQL।
Prisma যেখানে সমর্থন করে: না
ক্লায়েন্ট API
$queryRaw, $executeRaw
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্লায়েন্ট API
$queryRawTyped (TypedSQL)
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
ইন্টারসেপ্ট করা হয় না। Prisma Client আগের মতোই এটি চালায়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite (প্রিভিউ)সোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ক্লায়েন্ট API
findUnique batching
Prisma এটি সমর্থন করে; prisma-sql-এ এর কোনো সমতুল্য নেই।
Prisma এটি সমর্থন করে; prisma-sql-এ এর কোনো সমতুল্য নেই।
প্রতিটি findUnique নিজস্ব SQL কুয়েরি চালায়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ক্লায়েন্ট API
log, $on('query')
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
SQL-এ কম্পাইল হয়; কিছু আর্গুমেন্ট শেপে Prisma-তে ফলব্যাক করে।
ত্বরান্বিত কুয়েরি Prisma লগে পৌঁছায় না। debug বা onQuery ব্যবহার করুন।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ক্লায়েন্ট API
$batch, $batchCount
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
Prisma এটি সমর্থন করে; prisma-sql-এ এর কোনো সমতুল্য নেই।
এক রাউন্ড ট্রিপে একাধিক রিড। BigInt ও Decimal JS সংখ্যা হিসেবে ফেরত আসে।
Prisma যেখানে সমর্থন করে: না
ক্লায়েন্ট API
createShardedReader
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
prisma-sql যোগ করেছে। Prisma Client API-এর অংশ নয়।
raw রো ফেরত দেয়: কোনো টাইপ রূপান্তর নেই, কোনো enum ম্যাপিং নেই।
Prisma যেখানে সমর্থন করে: না
ক্লায়েন্ট API
Multiple schemas (@@schema)
Prisma এটি সমর্থন করে; prisma-sql-এ এর কোনো সমতুল্য নেই।
ওই ডেটাবেসে Prisma এটি সমর্থন করে না।
স্কিমা public-এ নির্দিষ্ট।
Prisma যেখানে সমর্থন করে: PostgreSQL
ফলাফলের টাইপ
Decimal
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
এই ডেটাবেসে আচরণ এখনও যাচাই করা হয়নি।
ফ্ল্যাট রোতে স্ট্রিং, include করা রিলেশনের ভেতরে সংখ্যা। অ্যাগ্রিগেট Prisma.Decimal ফেরত দেয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফলাফলের টাইপ
BigInt
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
এই ডেটাবেসে আচরণ এখনও যাচাই করা হয়নি।
ফ্ল্যাট রোতে স্ট্রিং, include করা রিলেশনের ভেতরে সংখ্যা। অ্যাগ্রিগেট bigint ফেরত দেয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফলাফলের টাইপ
DateTime
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
PostgreSQL: ফ্ল্যাট রোতে Date, include করা রিলেশনের ভেতরে স্ট্রিং। SQLite: raw সংখ্যা বা স্ট্রিং।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফলাফলের টাইপ
Boolean
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
SQLite 0 / 1 ফেরত দেয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফলাফলের টাইপ
Bytes
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
এই ডেটাবেসে আচরণ এখনও যাচাই করা হয়নি।
ফ্ল্যাট রোতে Buffer, include করা রিলেশনের ভেতরে hex স্ট্রিং।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLiteসোর্স থেকে অনুমান করা; কোনো টেস্ট রানে নিশ্চিত করা হয়নি।
ফলাফলের টাইপ
Json
SQL-এ কম্পাইল হয়ে postgres.js বা better-sqlite3 দিয়ে চলে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
include না থাকলে SQLite raw JSON স্ট্রিং ফেরত দেয়।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
ফলাফলের টাইপ
Enum with @map
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
ত্বরান্বিত, কিন্তু কোনো এরর ছাড়াই ফলাফল Prisma থেকে ভিন্ন হতে পারে।
স্কিমার নাম নয়, ডেটাবেসের মান ফেরত আসে।
Prisma যেখানে সমর্থন করে: PostgreSQL, SQLite
পূর্ণ প্যারিটি ম্যাপ খুলুনPrisma-এর API ও টাইপ রেখে Prisma-এর রিড এক্সিকিউশন পথ এড়িয়ে যান
এক্সটেনশন রিড অপারেশন (findMany, findFirst, findUnique, count, aggregate, groupBy) এক্সিকিউট হওয়ার আগেই ধরে ফেলে
query: {
$allModels: {
async $allOperations({ model, operation, args, query }) {
if (!ACCELERATED_METHODS.has(operation)) {
return query(args)
}
return executeAccelerated(model, operation, args, query)
},
},
}Prisma কুয়েরিকে অপটিমাইজড JOIN সহ দ্রুত, প্যারামিটারাইজড SQL-এ রূপান্তর করে
SELECT user_t.id, user_t.email, user_t.status,
COALESCE((
SELECT COALESCE(json_agg(json_build_object(
'id', posts_0.id,
'title', posts_0.title,
'authorId', posts_0."authorId"
)), '[]'::json)
FROM "public"."Post" posts_0
WHERE posts_0."authorId" = user_t.id
), '[]'::json) AS posts
FROM "public"."User" user_t
WHERE user_t.status = $1
-- params ["ACTIVE"]Prisma-এর রিড ওভারহেড এড়িয়ে postgres.js বা better-sqlite3 দিয়ে কুয়েরি চালায়
if (DIALECT === 'postgres') {
await client.unsafe(sql, normalizedParams).forEach((row) => {
results.push(row)
})
return results
}
const stmt = getOrPrepareStatement(client, sql)
return stmt.all(...normalizedParams)ফলাফল Prisma-এর প্রত্যাশিত আকারের সাথে মেলে। টাইপ, IntelliSense ও বিদ্যমান কুয়েরি কোড অপরিবর্তিত থাকে
const users = await prisma.user.findMany({
where: { status: 'ACTIVE' },
include: { posts: true },
})
users[0].email
users[0].posts[0].title
// Prisma Client-এর মতোই একই ইনফার করা টাইপ।
// Decimal, BigInt ও DateTime মান
// ভিন্ন হতে পারে; প্যারিটি ম্যাপে প্রতিটি কেস আছে।query: {
$allModels: {
async $allOperations({ model, operation, args, query }) {
if (!ACCELERATED_METHODS.has(operation)) {
return query(args)
}
return executeAccelerated(model, operation, args, query)
},
},
}Prisma-এর ডেভেলপার এক্সপেরিয়েন্স রেখে রিডে raw SQL এক্সিকিউশনের গতি পান
prisma-sql এমন সক্ষমতা যোগ করে যা Prisma Client-এ নেই। একই টাইপ, একই কোড স্টাইল।
N-টি ড্যাশবোর্ড কুয়েরি, একটি রাউন্ড ট্রিপ
স্বাধীন রিডগুলোকে একটি PostgreSQL রাউন্ড ট্রিপে একত্র করুন। টাইপসহ অবজেক্ট ফলাফল, Promise.all নিয়ে ঝামেলা নেই।
const dash = await prisma.$batch((b) => ({
users: b.user.count(),
posts: b.post.findMany({ take: 10 }),
stats: b.task.aggregate({ _count: true }),
}))সবচেয়ে ঘন ঘন চলা কুয়েরি আগেই তৈরি করে রাখুন
schema.prisma-তে একটি মডেলে অ্যানোটেশন দিন। generate-এর সময় হুবহু SQL তৈরি হয়ে যায়; রানটাইমে মিলে যাওয়া শেপগুলো রূপান্তর পুরোপুরি এড়িয়ে যায়।
/// @optimize {
/// "method": "findMany",
/// "query": {
/// "where": { "status": "$status" },
/// "take": "$take"
/// }
/// }
model User { ... }কৌশল ঠিক হয় ডেটা দেখে, অনুমানে নয়
সংগৃহীত রিলেশন পরিসংখ্যান অনুযায়ী ফ্ল্যাট JOIN, কোরিলেটেড সাবকুয়েরি এবং where-in সেগমেন্টেড লোডিংয়ের মধ্যে কৌশল বদলানো হয়। বড় চাইল্ড টেবিলে কখনো প্রতি-প্যারেন্ট স্ক্যান হয় না।
prisma-sql-collect-stats \
--output dist/planner.generated.js \
--prisma-client dist/client/index.jsসাধারণ পরিস্থিতি, যেখানে এই এক্সটেনশন বাস্তব পার্থক্য আনে
Prisma-এর অ্যাগ্রিগেশন ও groupBy অপারেশন সরাসরি SQL এক্সিকিউশন থেকে উল্লেখযোগ্য সুবিধা পায়
লোডের মধ্যে প্রতি কুয়েরির ওভারহেড জমতে থাকে, বিশেষ করে রিড-প্রধান এন্ডপয়েন্টে
সার্ভারলেসে প্রতিটি মিলিসেকেন্ড গুরুত্বপূর্ণ: যেখানে দরকার সেখানে রিড ল্যাটেন্সি কমান
ব্যবহারকারীরা ল্যাটেন্সি টের পান: দ্রুত রিড সঙ্গে সঙ্গে অনুভূত UX উন্নত করে
60 সেকেন্ডেরও কম সময়ে Prisma রিড দ্রুত করুন
# PostgreSQL
npm install prisma-sql postgres
# SQLite
npm install prisma-sql better-sqlite3generator client {
provider = "prisma-client"
}
generator sql {
provider = "prisma-sql-generator"
}npx prisma generateimport { PrismaClient } from '@prisma/client'
import { speedExtension, type SpeedClient } from './generated/sql'
import postgres from 'postgres'
const sql = postgres(process.env.DATABASE_URL!)
const basePrisma = new PrismaClient()
export const prisma = basePrisma.$extends(
speedExtension({ postgres: sql }),
) as SpeedClient<typeof basePrisma>const users = await prisma.user.findMany({
where: { status: 'ACTIVE' },
include: { posts: true },
})SQLite: একটি better-sqlite3 ডেটাবেসসহ speedExtension({ sqlite: db }) পাস করুন।পূর্ণ সেটআপ গাইড
Prisma রিড অপটিমাইজ করা নিয়ে সাধারণ প্রশ্ন
Prisma স্কিমা-ভিত্তিক যাচাই, সামঞ্জস্যপূর্ণ কুয়েরি আচরণ ও ফলাফল গঠনের মতো API নিশ্চয়তা বাস্তবায়ন করে বলে ওভারহেড যোগ হয়। এই স্তরগুলো চমৎকার ডেভেলপার এক্সপেরিয়েন্স দেয়, কিন্তু সরাসরি raw SQL চালানোর তুলনায় বেশি সময় নেয়।
এই এক্সটেনশন যোগ করে রিড-প্রধান Prisma ওয়ার্কলোড অপটিমাইজ করুন। এটি Prisma-এর API ও টাইপ রেখে postgres.js বা better-sqlite3 দিয়ে সরাসরি SQL-এ রিড অপারেশন চালায়। সেটআপ মানে ইনিশিয়ালাইজেশনে ছোট একটি পরিবর্তন; বিদ্যমান কুয়েরি রিফ্যাক্টর করতে হয় না।
অনেক রিড ওয়ার্কলোডে, হ্যাঁ। raw SQL এক্সিকিউশনের তুলনায় আর্কিটেকচারগত ওভারহেড থাকে। এই এক্সটেনশনের লক্ষ্য হলো Prisma-এর DX বজায় রেখে সরাসরি SQL চালিয়ে রিড ল্যাটেন্সি কমানো।
হ্যাঁ। Prisma Client ইনিশিয়ালাইজ করার সময় একবার এক্সটেনশন যোগ করুন, আর বিদ্যমান Prisma কুয়েরি কোড যেমন আছে তেমন রাখুন। রিড অপারেশন দ্রুত চলে, আর আপনার Prisma API, টাইপ ও স্কিমা একই থাকে।
হ্যাঁ, সমর্থিত রিড পথে প্রোডাকশন ব্যবহারের জন্যই এটি ডিজাইন করা। রোলআউটের আগে সবসময় আপনার Prisma ভার্সনের সাথে সামঞ্জস্য যাচাই করুন এবং নিজের রিগ্রেশন টেস্ট চালান।
অ্যাগ্রিগেশন ও groupBy প্রায়ই নির্দিষ্ট ওভারহেড (কুয়েরি প্রসেসিং ও ফলাফল গঠন) বাড়িয়ে তোলে এবং এতে বড় মধ্যবর্তী রেজাল্ট সেট জড়িত থাকতে পারে। এই এক্সটেনশন সরাসরি SQL জেনারেট করে এই রিডগুলো অপটিমাইজ করে, যা সাধারণত অ্যাগ্রিগেশন-প্রধান এন্ডপয়েন্টে ল্যাটেন্সি কমায়।
সমর্থিত PostgreSQL ও SQLite রিডের জন্য বর্তমান বেঞ্চমার্ক টেবিল দেখুন