SELECT
Užklausose nurodykite būtinus laukus
Užuot pasirinkę visus užklausos laukus SELECT
, pasirinkite tik būtinus laukus, kad sumažintumėte apkrovą ir pagerintumėte užklausos greitį.
Pavyzdžiui, jei jums rūpi tik kliento vardas ir adresas, pakeiskite užklausą:
SELECT * FROM customers;
su
SELECT name, address FROM customers;
Sukurti indeksus
Index
padėti MySQL
greičiau ieškoti ir gauti duomenų. Nustatykite laukus, kurie dažnai naudojami WHERE
, JOIN
, arba ORDER BY
sąlygose, ir sukurkite jiems indeksus.
Pavyzdžiui, lentelėje „ orders
“, jei „ customer_id
“ laukas dažnai naudojamas WHERE
arba JOIN
užklausose, indeksą galite sukurti taip:
CREATE INDEX idx_customer_id ON orders(customer_id);
Naudokite atitinkamų tipų indeksus
MySQL
pateikia įvairių tipų indeksus, tokius kaip B-tree
, maiša ir full-text
. Pasirinkite tinkamą indekso tipą pagal užklausos reikalavimus, kad užtikrintumėte optimalų našumą.
Pavyzdžiui, jei reikia ieškoti teksto duomenų lauke, indeksą galite sukurti full-text
taip:
CREATE FULLTEXT INDEX idx_description ON products(description);
Optimizuokite užklausas
Naudokite EXPLAIN
norėdami peržiūrėti užklausos vykdymo planą ir analizuoti, kaip MySQL
jis veikia. Tai padeda nustatyti našumo problemas ir optimizuoti užklausas naudojant indeksus arba perrašant užklausas.
Pavyzdžiui, norėdami pamatyti užklausos užklausos planą SELECT
, paleiskite šią komandą:
EXPLAIN SELECT * FROM orders WHERE customer_id = 123;
Apribokite grąžinamų rezultatų skaičių
Kai užklausa pateikia daug rezultatų, apribokite pateiktų rezultatų skaičių naudodami sąlygą LIMIT
. Tai padeda sumažinti apkrovą ir pagerinti užklausos greitį.
Pavyzdžiui, norėdami pateikti tik 10 rezultatų iš lentelės „produktai“, galite naudoti šią užklausą:
SELECT * FROM products LIMIT 10;
Naudokite INNER JOIN
vietoj JOIN
INNER JOIN
veikia geriau nei įprastai JOIN
. Naudokite INNER JOIN
, kai rūpinatės tik įrašais, kurie atitinka abiejose lentelėse.
Pavyzdžiui, norėdami sujungti lenteles " orders
" ir " customers
" pagal customer_id
lauką " ", galite naudoti šią užklausą:
SELECT * FROM orders INNER JOIN customers ON orders.customer_id = customers.customer_id;
Laikinąsias lenteles naudokite atsargiai
Tam tikrais atvejais galima naudoti laikinąsias lenteles, tačiau jas reikia naudoti atsargiai, nes jos gali sulėtinti užklausas. Apsvarstykite galimybę optimizuoti užklausas, kad nenaudotumėte laikinų lentelių, jei įmanoma.
Pavyzdžiui, užuot naudoję laikiną lentelę šioje užklausoje:
CREATE TEMPORARY TABLE temp_table SELECT * FROM products;
galite pabandyti optimizuoti užklausą, kad būtų galima tiesiogiai užklausti duomenis iš pradinės lentelės.
Tiksliai sureguliuokite MySQL konfigūraciją
Apsvarstykite galimybę iš naujo sukonfigūruoti MySQL, kad maksimaliai išnaudotumėte sistemos išteklius ir atitiktumėte programos reikalavimus. Tai apima atminties, buferio dydžių, ryšio apribojimų ir kitų parametrų konfigūravimą. Peržiūrėkite MySQL dokumentaciją ir sužinokite, kaip pritaikyti konfigūraciją, kad ji atitiktų jūsų konkrečią aplinką.
Ištrinkite nereikalingus duomenis
Ištrinkite nereikalingus duomenis arba sukurkite atsargines senų duomenų kopijas, kad sumažintumėte duomenų bazės dydį ir pagerintumėte užklausos greitį.
Pavyzdžiui, jei turite lentelę, logs
kurioje saugomi seni žurnalo įrašai, galite ištrinti senesnius nei metų įrašus naudodami šią užklausą:
DELETE FROM logs WHERE created_at < '2022-01-01';
Naudokite atmintį cache
Sukonfigūruokite MySQL atmintį cache
, kad būtų saugomos dažnai vykdomos užklausos ir neseniai pasiekti duomenys. Tai padeda sumažinti prieigos prie disko laiką ir pagerinti užklausos greitį.
Pavyzdžiui, norėdami sukonfigūruoti 1 GB talpyklos talpyklą, galite modifikuoti MySQL „my.cnf“ konfigūracijos failą taip:
[mysqld]
...
query_cache_type = 1
query_cache_size = 1G
Atkreipkite dėmesį, kad pirmiau pateikti pavyzdžiai yra iliustratyvūs ir turi būti atitinkamai pakoreguoti pagal faktinės duomenų bazės struktūrą ir reikalavimus. Atidžiai išbandykite ir įvertinkite efektyvumą prieš ir po šių optimizavimo metodų pritaikymo, kad įsitikintumėte, jog jie tinka jūsų konkrečiai aplinkai.