| // Database Indexes for Performance Optimization | |
| // Add these to your schema for better query performance | |
| // index helper omitted; this file is documentation-only | |
| /* | |
| Recommended indexes to add to your schema: | |
| 1. Businesses table: | |
| - index('businesses_user_idx').on(businesses.userId) | |
| - index('businesses_email_idx').on(businesses.email) | |
| - index('businesses_email_status_idx').on(businesses.emailStatus) | |
| - index('businesses_created_at_idx').on(businesses.createdAt) | |
| 2. Email Logs table: | |
| - index('email_logs_business_idx').on(emailLogs.businessId) | |
| - index('email_logs_status_idx').on(emailLogs.status) | |
| - index('email_logs_sent_at_idx').on(emailLogs.sentAt) | |
| 3. Email Templates table: | |
| - index('email_templates_user_idx').on(emailTemplates.userId) | |
| - index('email_templates_default_idx').on(emailTemplates.isDefault) | |
| 4. Workflows table: | |
| - index('workflows_user_idx').on(workflows.userId) | |
| - index('workflows_active_idx').on(workflows.isActive) | |
| 5. Campaigns table (if created): | |
| - index('campaigns_user_idx').on(campaigns.userId) | |
| - index('campaigns_status_idx').on(campaigns.status) | |
| - index('campaigns_created_at_idx').on(campaigns.createdAt) | |
| 6. Composite indexes for common queries: | |
| - index('businesses_user_status_idx').on(businesses.userId, businesses.emailStatus) | |
| - index('email_logs_business_status_idx').on(emailLogs.businessId, emailLogs.status) | |
| Apply these indexes by adding them to your schema definitions. | |
| */ | |
| export const performanceIndexes = { | |
| businesses: [ | |
| 'CREATE INDEX IF NOT EXISTS businesses_user_idx ON businesses(user_id);', | |
| 'CREATE INDEX IF NOT EXISTS businesses_email_idx ON businesses(email);', | |
| 'CREATE INDEX IF NOT EXISTS businesses_email_status_idx ON businesses(email_status);', | |
| 'CREATE INDEX IF NOT EXISTS businesses_created_at_idx ON businesses(created_at);', | |
| 'CREATE INDEX IF NOT EXISTS businesses_user_status_idx ON businesses(user_id, email_status);', | |
| ], | |
| emailLogs: [ | |
| 'CREATE INDEX IF NOT EXISTS email_logs_business_idx ON email_logs(business_id);', | |
| 'CREATE INDEX IF NOT EXISTS email_logs_status_idx ON email_logs(status);', | |
| 'CREATE INDEX IF NOT EXISTS email_logs_sent_at_idx ON email_logs(sent_at);', | |
| 'CREATE INDEX IF NOT EXISTS email_logs_business_status_idx ON email_logs(business_id, status);', | |
| ], | |
| emailTemplates: [ | |
| 'CREATE INDEX IF NOT EXISTS email_templates_user_idx ON email_templates(user_id);', | |
| 'CREATE INDEX IF NOT EXISTS email_templates_default_idx ON email_templates(is_default);', | |
| ], | |
| workflows: [ | |
| 'CREATE INDEX IF NOT EXISTS workflows_user_idx ON workflows(user_id);', | |
| 'CREATE INDEX IF NOT EXISTS workflows_active_idx ON workflows(is_active);', | |
| ], | |
| }; | |
| // Script to apply all indexes | |
| export function generateIndexSQL(): string[] { | |
| return Object.values(performanceIndexes).flat(); | |
| } | |