Veritabanı Yönetim Sistemleri (Başarım Eniyileme Performance Tuning)
Konular SQL Başarım Eniyileme (Performance Tuning) 2
SQL Başarım Eniyileme (Performance Tuning) 3
SELECT ifadesinde * (bütün sütunlar) yerine,gerekli olan sütun adları yazılırsa SQL sorgusu daha hızlı çalışır. 4
LIMIT OFFSET
Gereksiz Sıralama Başarımı Düşürür
Index Kullanınız
EXISTS, IN ve tablo birleşimi operatörlerini sorguda uygun olarak kullanınız. IN genellikle yavaş performansa sahiptir. Filtreleme kriterlerinin çoğu altsorgudaysa IN kullanımı etkilidir. Filtreleme kriterlerinin çoğu anasorgudaysa EXISTS kullanımı etkilidir. 8
Birleşim kullanımı bire-çok ilişkiye sahip tabloları kapsadığında,distinct yerine EXIST kullanınız. 9
HAVING şartı bütün satırlar seçildikten sonra satırları filtrelemek için kullanılır.having şartını diğer ifadelerde kullanmayınız. Bunun yerine: SELECT subject, count(subject) FROM student_details GROUP BY subject HAVING subject!= 'Vancouver' AND subject!= 'Toronto'; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT subject, count(subject) FROM student_details WHERE subject!= 'Science' AND subject!= 'Maths' GROUP BY subject; 10
Bazen ana sorguda birden fazla alt sorgular bulunabilir.alt sorgu bloklarının sayısı azaltmaya çalışın. Bunun yerine: SELECT name FROM employee WHERE salary = (SELECT MAX(salary) FROM employee_details) AND age = (SELECT MAX(age) FROM employee_details) AND emp_dept = 'Electronics'; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT name FROM employee WHERE (salary, age ) = (SELECT MAX (salary), MAX (age) FROM employee_details) AND dept = 'Electronics'; SELECT * FROM "products" WHERE ("UnitPrice", "UnitsInStock") <(SELECT AVG ("UnitPrice"), AVG ("UnitsInStock") FROM "products") 11
UNION yerine UNION ALL komutunu kullanmaya çalışınız. Union Distinct işlemini de gerçekleştirdiği için daha yavaştır Bunun yerine: SELECT id, first_name, subject FROM student_details_class10 UNION SELECT id, first_name FROM sports_team; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id, first_name FROM student_details_class10 UNION ALL SELECT id, first_name FROM sports_team; 12
WHERE şartında koşulları kullanırken dikkat ediniz. Bunun yerine: SELECT id, first_name, age FROM student_details WHERE age!= 10; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id, first_name, age FROM student_details WHERE age > 10; Bunun yerine: SELECT id, first_name, age FROM student_details WHERE SUBSTR(first_name,1,3) = 'Cha'; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id, first_name, age FROM student_details WHERE first_name LIKE 'Chan%'; 13
WHERE şartında koşulları kullanırken dikkat ediniz. Bunun yerine: SELECT id, name, salary FROM employee WHERE dept location= 'ElectronicsBangalore'; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id, name, salary FROM employee WHERE dept = 'Electronics' AND location = 'Bangalore'; Use non-column expression on one side of the query because it will be processed earlier. Bunun yerine: SELECT id, name, salary FROM employee WHERE salary + 10000 < 35000; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id, name, salary FROM employee WHERE salary < 25000; 14
Use non-column expression on one side of the query because it will be processed earlier. Bunun yerine: SELECT id, first_name, age FROM student_details WHERE age NOT = 10; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id, first_name, age FROM student_details WHERE age > 10; Aynı satırların ya da aynı tablonun tekrarını önlemek için DECODE kullanınız.decode aynı zamanda GROUP BY ya da ORDER BY şartının yerine kullanılabilir. Bunun yerine: SELECT DECODE(location,'Bangalore',id,NULL) id FROM employee WHERE name LIKE 'Ramesh%'; Aşağıdaki SQL sorgusu kullanılmalıdır. SELECT id FROM employee WHERE name LIKE 'Ramesh%' AND location = 'Bangalore'; 15
Büyük ikili nesneleri depolamak için ilk önce onları dosyalama sistemine yerleştiriniz ve veritabanına dosyanın konumunu ekleyiniz. Etkinperformans sağlayan SQL sorguları yazmak için Genel SQL standart kurallarını takip edin. 16
Vacuum ALTER TABLE table_name SET (autovacuum_vacuum_scale_factor = 0.0); ALTER TABLE table_name SET (autovacuum_vacuum_threshold = 5000); VACUUM; VACUUM FULL; VACUM customer; ALTER TABLE table_name SET (autovacuum_vacuum_scale_factor = 0.0); ALTER TABLE table_name SET (autovacuum_vacuum_threshold = 5000); 17
Kaynaklar http://www.postgresql.org/docs/9.1/static/sql-vacuum.html http://www.postgresql.org/docs/current/static/using-explain.html 18