Pull to refresh

Мифы SQL

Reading time2 min
Views6K
Многие разработчики с немалым опытом разработки на любых императивных языках свято верят в то что SQL это тоже самое. Только синтаксис другой. После написания нескольких запросов для вытаскивания данных в свой сервер приложений начинают рождаться мифы о БД.


У меня примеры написаны и проверенны для Оракла, просто он мне ближе.
Но тоже самое действительно для любой СУБД.

UPD: Просили добавить описание что и почему. Добавил.

1. Магический параметр где-нибудь глубоко в конфигах сервера fast = true.
2. Скорость работы запроса оценивается по тому как быстро вывелись первые 20 строк.
3. Можно взять и оптимизировать любой отдельный запрос, или даже часть запроса не трогая ничего кроме него.
4. Понять как работает запрос и улучшить его можно просто посмотрев на код запроса.
5. Во временных таблицах не надо делать ни Primary Key, ни индексов.
6. Внешний ключ = Индекс по полю в дочерней таблице
7. Запрос с меньшей стоимостью обязан работать быстрее.
8. Абсолютная идентичность следующих вариантов кода.

declare
 summ number(10);
 i number(10);
 cursor c is select a from test_pk;
begin
 summ := 0;
 open c;
 
 loop
  fetch c into i;
  exit when c%notfound;

  summ := summ + i;
 end loop;
 
 close c;
 
 dbms_output.put_line(summ);
 
end;


и

select SUM(a) from table1


Основное объяснение ведь и там и там просто суммируем, какая разница как именно это делается.

9. Любое обращение по индексу лучше чем без него.
9а. И связанное с этим Запрос работает медленно, надо добавить индекс.
В запросе Full Table Scan по 100 записям, из которых надо 95 и рядом Full Index Scan по миллиону записей из которых надо тоже 95. Все будут 'оптимизировать' Full Table Scan
10. Скорость соединения таблиц сильно зависит от типов и количества полей по которым мы их соединяем.
10а. Скорость напрямую зависит от количества таблиц участвующих в запросе.
11. В запросах вида

SELECT *
FROM table t
Where t.a = 123
AND t.b = 321


Всегда будут работать два отдельных индекса по полям а и b.

Tags:
Hubs:
Total votes 52: ↑24 and ↓28-4
Comments39

Articles