Files
SkyArtShop/backend/optimize-database-indexes.sql

32 lines
1.7 KiB
MySQL
Raw Normal View History

-- Database Performance Optimization: Additional Indexes
-- Focus: Speed up frequently queried fields
-- Products: Add missing indexes for common queries
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_products_slug ON products(slug) WHERE isactive = true;
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_products_active_featured ON products(isactive, isfeatured) WHERE isactive = true AND isfeatured = true;
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_products_active_category ON products(isactive, category) WHERE isactive = true;
-- Blog: Add slug index for single post queries
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_blogposts_slug ON blogposts(slug) WHERE ispublished = true;
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_blogposts_published ON blogposts(ispublished, createdat DESC) WHERE ispublished = true;
-- Portfolio: Add composite index for common query patterns
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_portfolio_active_display ON portfolioprojects(isactive, displayorder, createdat DESC) WHERE isactive = true;
-- Analyze tables to update statistics for query planner
ANALYZE products;
ANALYZE product_images;
ANALYZE blogposts;
ANALYZE portfolioprojects;
ANALYZE pages;
-- Add database-level connection pooling settings for better performance
ALTER DATABASE skyartshop SET random_page_cost = 1.1; -- SSD optimization
ALTER DATABASE skyartshop SET effective_cache_size = '2GB'; -- Assume 2GB available for caching
ALTER DATABASE skyartshop SET shared_buffers = '512MB'; -- Increase shared buffer
ALTER DATABASE skyartshop SET work_mem = '16MB'; -- Increase work memory for sorting
ALTER DATABASE skyartshop SET maintenance_work_mem = '128MB'; -- For VACUUM and CREATE INDEX
-- Vacuum analyze to reclaim space and update statistics
VACUUM ANALYZE;