Version 17 (modified by 10 days ago) ( diff ) | ,
---|
Индекси
Индексите ги забрзуваат операциите за пребарување и филтрирање, што значително го намалува времето на извршување на SQL барања.
Индексирањето има смисла ако ќе ја подобри брзината на наредбите SELECT, JOIN, WHERE, ORDER BY и GROUP BY.
Направивме измени во db.js така што Client
го заменивме за Pool
бидејки client секогаш отвара нова конекција а со pool користи збир конекции за подобра оптимизација.
Кога зборуваме за поставување на барања до база, на старата верзија тоа беше веројатно многу по лимитирано,
а сега имаме овозможено повеќе истовремени конекции т.е. max: 20
.
Во нашиот код рачно се отвора и затвора конекција, додека новиот код користи getClient()
за подобра контрола над конекциите. Освен тоа при пад на конекција потребно е restart а сега имаме момент каде pool.on("error")
ја фаќа грешката.
Да не заборавиме и на Timeout моментот, сега имаме поставено idleTimeoutMillis
и connectionTimeoutMillis
за подобро управување.
module.exports = { query: (text, params) => pool.query(text, params), getClient: async () => { const client = await pool.connect(); return client; }, };
Што е важно за индекси?
-> Примарни клучеви да се индексирани автоматски
-> Најчесто пребарувани колони (особено во WHERE, JOIN, ORDER BY или GROUP BY) треба да имаат индекси
-> Надворешните клучеви треба да имаат индекси за побрзи JOIN операции
-> Колони што се често филтрирани или сортирани треба да имаат индекси
Индекси за подобрување на JOIN
перформанси
CREATE INDEX idx_customers_email ON customers(email); CREATE INDEX idx_orders_customer_id ON orders(id_customer); CREATE INDEX idx_delivery_order_id ON delivery(id_order); CREATE INDEX idx_products_category_id ON products(id_category); CREATE INDEX idx_stock_product_id ON stock(id_product); CREATE INDEX idx_contains_order_id ON contains(id_order); CREATE INDEX idx_contains_stock_id ON contains(id_stock);
Индекси за оптимизирање на пребарувања со WHERE
CREATE INDEX idx_orders_status ON orders(status); CREATE INDEX idx_stock_price ON stock(price); CREATE INDEX idx_products_name ON products(product_name);
Тестирање на CREATE INDEX
наредби
После направените измени, кодот додава индекси автоматски ако не постојат со опцијата
CREATE INDEX IF NOT EXISTS
и ги подобривме перформансите на JOIN, WHERE, ORDER BY со индексирање
притоа сега се избегнуваат грешки ако индексите веќе постојат.
Attachments (2)
- testiranjeCREATEINDEX.png (177.5 KB ) - added by 10 days ago.
- explain.png (179.2 KB ) - added by 10 days ago.
Download all attachments as: .zip