Skip to content

Commit 51b0de2

Browse files
committed
feat: add indexes
1 parent b8f182d commit 51b0de2

File tree

3 files changed

+44
-15
lines changed

3 files changed

+44
-15
lines changed

initial.sql

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,5 +41,17 @@ CREATE TABLE IF NOT EXISTS prices (
4141
UNIQUE(model_year_id, reference_table_id)
4242
);
4343

44+
-- Existing indexes
4445
CREATE INDEX IF NOT EXISTS idx_prices_reference ON prices(reference_table_id);
4546
CREATE INDEX IF NOT EXISTS idx_prices_fipe_code ON prices(fipe_code);
47+
48+
-- Foreign key indexes (for JOINs)
49+
CREATE INDEX IF NOT EXISTS idx_models_brand_id ON models(brand_id);
50+
CREATE INDEX IF NOT EXISTS idx_model_years_model_id ON model_years(model_id);
51+
CREATE INDEX IF NOT EXISTS idx_prices_model_year_id ON prices(model_year_id);
52+
53+
-- Filter indexes
54+
CREATE INDEX IF NOT EXISTS idx_models_segment ON models(segment);
55+
CREATE INDEX IF NOT EXISTS idx_reference_year_month ON reference_tables(year, month);
56+
CREATE INDEX IF NOT EXISTS idx_model_years_year ON model_years(year);
57+
CREATE INDEX IF NOT EXISTS idx_brands_name ON brands(name);

src/db/connection.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ import postgres from 'postgres';
33
import { env } from '../config.js';
44
import * as schema from './schema.js';
55

6-
const client = postgres(env.DATABASE_URL);
6+
const client = postgres(env.DATABASE_URL, { max: 20 });
77

88
export const db = drizzle(client, { schema });
99

src/db/schema.ts

Lines changed: 31 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,19 +9,27 @@ import {
99
index,
1010
} from 'drizzle-orm/pg-core';
1111

12-
export const referenceTables = pgTable('reference_tables', {
13-
id: serial('id').primaryKey(),
14-
code: integer('code').unique().notNull(),
15-
month: integer('month').notNull(),
16-
year: integer('year').notNull(),
17-
crawledAt: timestamp('crawled_at'),
18-
});
12+
export const referenceTables = pgTable(
13+
'reference_tables',
14+
{
15+
id: serial('id').primaryKey(),
16+
code: integer('code').unique().notNull(),
17+
month: integer('month').notNull(),
18+
year: integer('year').notNull(),
19+
crawledAt: timestamp('crawled_at'),
20+
},
21+
(table) => [index('idx_reference_year_month').on(table.year, table.month)],
22+
);
1923

20-
export const brands = pgTable('brands', {
21-
id: serial('id').primaryKey(),
22-
fipeCode: varchar('fipe_code', { length: 10 }).unique().notNull(),
23-
name: varchar('name', { length: 100 }).notNull(),
24-
});
24+
export const brands = pgTable(
25+
'brands',
26+
{
27+
id: serial('id').primaryKey(),
28+
fipeCode: varchar('fipe_code', { length: 10 }).unique().notNull(),
29+
name: varchar('name', { length: 100 }).notNull(),
30+
},
31+
(table) => [index('idx_brands_name').on(table.name)],
32+
);
2533

2634
export const SEGMENTS = [
2735
'Buggy',
@@ -50,7 +58,11 @@ export const models = pgTable(
5058
segment: varchar('segment', { length: 20 }),
5159
segmentSource: varchar('segment_source', { length: 10 }),
5260
},
53-
(table) => [unique().on(table.brandId, table.fipeCode)],
61+
(table) => [
62+
unique().on(table.brandId, table.fipeCode),
63+
index('idx_models_brand_id').on(table.brandId),
64+
index('idx_models_segment').on(table.segment),
65+
],
5466
);
5567

5668
export const modelYears = pgTable(
@@ -64,7 +76,11 @@ export const modelYears = pgTable(
6476
fuelCode: integer('fuel_code').notNull(),
6577
fuelName: varchar('fuel_name', { length: 50 }),
6678
},
67-
(table) => [unique().on(table.modelId, table.year, table.fuelCode)],
79+
(table) => [
80+
unique().on(table.modelId, table.year, table.fuelCode),
81+
index('idx_model_years_model_id').on(table.modelId),
82+
index('idx_model_years_year').on(table.year),
83+
],
6884
);
6985

7086
export const prices = pgTable(
@@ -85,5 +101,6 @@ export const prices = pgTable(
85101
unique().on(table.modelYearId, table.referenceTableId),
86102
index('idx_prices_reference').on(table.referenceTableId),
87103
index('idx_prices_fipe_code').on(table.fipeCode),
104+
index('idx_prices_model_year_id').on(table.modelYearId),
88105
],
89106
);

0 commit comments

Comments
 (0)