Top Banner
Оптимизация SQL Михаил Гуренков 17 октября 2008 г. Клуб Маинфо.ру
24

Оптимизация SQL

Jun 17, 2015

Download

Technology

Оптимизаций SQL, Михаил Гуренков, Клуб MAInfo.ru
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Оптимизация SQL

Оптимизация SQLМихаил Гуренков

17 октября 2008 г. Клуб Маинфо.ру

Page 2: Оптимизация SQL

Упрощение схемы данных

Page 3: Оптимизация SQL

Неявное соединение → ...

select *from xCompaniesToCategories cc, xCompanies c, xCompanyProperties p, xPersons pe, #addresses aj, #addresses af, xCompaniesToPersons ctp, xContracts cowhere p.id_Company = c.id and pe.id = id_Chief and aj.id = id_DejuroAddress and af.id = id_DefactoAddress and ctp.id_Company = c.id and ctp.id_Person = pe.id and co.id_Company = c.id and c.id = cc.id_Company and id_Category = 30 and p.id_Company = c.id

Page 4: Оптимизация SQL

... → Явное соединение

select *from xCompanies c join xCompaniesToCategories cc on c.id = cc.id_Company join xCompanyProperties p on p.id_Company = c.id join xPersons pe on pe.id = id_Chief join #addresses aj on aj.id = id_DejuroAddress join #addresses af on af.id = id_DefactoAddress join xCompaniesToPersons ctp on ctp.id_Company = c.id and ctp.id_Person = pe.id join xContracts co on co.id_Company = c.idwhere id_Category = 30

Page 5: Оптимизация SQL

Типовые запросы → представления

select * from OrderServices s join Orders o on s.id_Order = o.idwhere id_Company = 1234 ↓ select * from vOrderServices where id_Company = 1234

Page 6: Оптимизация SQL

Инкапсуляция запросовcreate view vOrderServiceHistory asselect os1.*, os1.AffectedDate DateOn, os2.AffectedDate DateOff, os2.id_Order id_OrderOff from vOrderServices os1 left join vOrderServices os2 on (os1.id_Company = os2.id_Company and os1.id_Resource = os2.id_Resource and os2.ServiceHash = os1.ServiceHash and os2.Rang < os1.Rang and os2.Action = -1) and not exists (select * from vOrderServices os3 where os1.id_Company = os3.id_Company and os1.id_Resource = os3.id_Resource and os3.ServiceHash = os1.ServiceHash and os3.Rang > os2.Rang and os3.Rang < os1.Rang and os3.Action = -1)

where os1.OrderTypeAction = 1

Page 7: Оптимизация SQL

Рефакторинг базы данных

Page 8: Оптимизация SQL

Использование индексов

Page 9: Оптимизация SQL

Оптимизаторы

Rule-based (RBO)Cost-based (CBO)

Page 10: Оптимизация SQL

Денормализация данных

Page 11: Оптимизация SQL

Составные тэги

ЦСКА (баскетболл, муж)

↓ «ЦСКА (баскетболл, муж)», «баскетболл», «муж»

Page 12: Оптимизация SQL

SQL и процедурный стиль программирования

Page 13: Оптимизация SQL

Новости по теме

select news.* from news join ( select distinct n.id from news n join taggings t1 on t1.news_id = ? join taggings t2 on t2.news_id = ? and t1.id_tag > t2.id_tag join taggings r1 on t1.tag_id = r1.tag_id and r1.news_id = n.id join taggings r2 on t2.tag_id = r2.tag_id and r2.news_id = n.id ) related on news.id = related.idwhere news.id != ?order by publishing_date desc

Page 14: Оптимизация SQL

Публикация прайс-листа

Page 15: Оптимизация SQL

Функции

select id, dbo.GetServiceAbonPrice(id, getdate()) as AbonPrice from vOrderServices

select id, abon.Price from vOrderServices os join dbo.GetAbonPrices() as abon on abon.ServiceHash = os.ServiceHash and abon.id_Company = os.id_Company

Page 16: Оптимизация SQL

В заключение

Page 17: Оптимизация SQL

Главные мысли

1. Забота о схеме данных2. Правильное использование индексов 3. SQL — не язык программирования

Page 18: Оптимизация SQL

Мартин Грабер«SQL»

Page 19: Оптимизация SQL

Джо Селко«SQL для профессионалов»

Page 20: Оптимизация SQL

«Рефакторинг баз данных»

Скотт Эмблер, Прамод Садаладж

Page 21: Оптимизация SQL

Ссылки

1. www.sql.ru2. msdn.microsoft.com3. dev.mysql.com/doc/refman/5.1/en/optimization.html 4. community.livejournal.com/ru_mysql/ 5. ...

Page 22: Оптимизация SQL

www.dreamspark.ru

Page 23: Оптимизация SQL

Контакты

[email protected] www.gurenkov.net

Page 24: Оптимизация SQL

SQL has been optimized :)