Форум программистов, компьютерный форум, киберфорум
Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 3 / 1
Регистрация: 06.09.2013
Сообщений: 36

что эффективнее?

24.12.2013, 14:08. Показов 719. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
как лучше создавать запрос, допустим
Пусть требуется узнать не поставщиков продукта 11, как это делалось в предыдущих запросах, а поставщиков помидоров, являющихся продуктом с номером 11. Для этого можно дать запрос
SQL
1
2
3
4
5
6
7
8
9
SELECT  Название, Статус
FROM    Поставщики
WHERE   ПС IN
    (   SELECT  ПС
        FROM    Поставки
        WHERE   ПР IN
            (   SELECT  ПР
                FROM    Продукты
                WHERE   Продукт = 'Помидоры' ));
или
SQL
1
2
3
4
5
SELECT  Название, Статус
FROM    Поставщики, Поставки, Продукты
WHERE   Поставщики.ПС = Поставки.ПС
AND Поставки.ПР = Продукты.ПР
AND Продукт = 'Помидоры';
вторй вариант покомпктнее, но он сразу обрабатывает несколько таблиц, т.е. на какой то момент блокирует все таблицы одновременно, в то время как первый работает с таблицами поочередно.
запросы какой конструкции следует создавать и каких правил стоит придерживаться?
В данной случае , думаю, лучше 1 вариант.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.12.2013, 14:08
Ответы с готовыми решениями:

Что эффективнее?
У меня есть трехмерный массив содержащий определенные элементы.У этих элементов есть индивидуальные данные(Вкл/Выкл, направление, запас...

Что эффективнее?
Здравствуйте уважаемые форумчане! Подскажите: что эффективнее seo+ppc (реклама в яндекс.директ или google adsense), чистое seo или чистое...

Что эффективнее?
Привет всем,посоветуйте вот у меня очень много txt файлов,я произвожу поиск по ним,и открываю их,что эффективнее,делать так,или создать...

10
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
24.12.2013, 14:31
Вопрос без указания СУБД смысла не имеет.
0
3 / 3 / 1
Регистрация: 06.09.2013
Сообщений: 36
24.12.2013, 14:43  [ТС]
Например для для mysql и postgres
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
24.12.2013, 15:34
Эти СУБД могут выводить план выполнения запроса. Посмотрите на него на реальных данных и выберете более подходящий. Про абстрактные "на глазок этот запрос лучше, чем тот" лучше забыть.
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
25.12.2013, 13:16
Цитата Сообщение от dimann889s Посмотреть сообщение
он сразу обрабатывает несколько таблиц, т.е. на какой то момент блокирует все таблицы одновременно
Вот про эту фантазию поподробнее.
0
3 / 3 / 1
Регистрация: 06.09.2013
Сообщений: 36
30.12.2013, 23:34  [ТС]
разве при обращении к таблице она не блокируется? Я думаю то , что единомоментно обрабатывается только 1 один запрос по данной таблице, второй ждет своей очереди. Разве не так?
0
Эксперт Java
 Аватар для turbanoff
4094 / 3828 / 745
Регистрация: 18.05.2010
Сообщений: 9,331
Записей в блоге: 12
30.12.2013, 23:54
Цитата Сообщение от dimann889s Посмотреть сообщение
разве при обращении к таблице она не блокируется? Я думаю то , что единомоментно обрабатывается только 1 один запрос по данной таблице, второй ждет своей очереди. Разве не так?
Если несколько запросов это select-ы - ничего не блокируется в большинстве СУБД.
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
31.12.2013, 03:59
Таблицы целиком блокируются при определенных уровнях изоляции специально, по запросу пользователя. В ряде СУБД могут блокироваться отдельные записи или страницы таблицы. Но в моде сейчас СУБД-версионники, где вообще ничего не блокируется, а в случае update или delete операторов создаются delta-версии записей, чтобы отделить работу одних транзакций от других. В любом случае, это достаточно глубинные понятия, и никакого отношения к выбираемому стилю написания запросов, типа исходного поста, не имеет. Ну либо имеет, но это точно не ваш случай, т.к. первый запрос плох с любой точки зрения, и оправдания ему нет.
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
31.12.2013, 14:47
Цитата Сообщение от arni Посмотреть сообщение
т.к. первый запрос плох с любой точки зрения, и оправдания ему нет.
Крайне вредное утверждение, особенно, без указания СУБД, реального распределения данных и т.п.
0
 Аватар для arni
914 / 879 / 62
Регистрация: 06.01.2010
Сообщений: 2,367
Записей в блоге: 6
01.01.2014, 11:31
Цитата Сообщение от KuKu Посмотреть сообщение
Крайне вредное утверждение, особенно, без указания СУБД, реального распределения данных и т.п.
Вам остается привести гипотетический пример СУБД и распределения данных, когда возможно 3 SELECT покажут себя лучшим образом, чем 1 SELECT+JOIN
0
 Аватар для KuKu
1563 / 1041 / 94
Регистрация: 17.04.2009
Сообщений: 2,995
01.01.2014, 14:27
Цитата Сообщение от arni Посмотреть сообщение
Вам остается привести гипотетический пример СУБД и распределения данных, когда возможно 3 SELECT покажут себя лучшим образом, чем 1 SELECT+JOIN
Это все тот же один селект. Как будет осуществляться доступ остается на совести разработчиков СУБД. В обоих случаях надо как-то прочитать данные из трех таблиц и не важно(почти не важно ) они через select или join добавлены.

Дома только СУБД oracle 12.1 - пример на ней. Вид запроса как и у ТС'а. Первый отрабатывается за 0.25с, второй за 0.32с.
SQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
DROP TABLE ref_a_b;
DROP TABLE d_a;
DROP TABLE d_b;
 
CREATE TABLE d_a
(
  id NUMBER PRIMARY KEY,
  s_name varchar2(255)
);
 
CREATE TABLE d_b
(
  id NUMBER PRIMARY KEY,
  s_name varchar2(255)
);
 
CREATE TABLE ref_a_b
(
  a_id NUMBER, FOREIGN KEY(a_id) REFERENCES d_a(id),
  b_id NUMBER, FOREIGN KEY(b_id) REFERENCES d_b(id)
);
 
INSERT INTO d_a(id, s_name) SELECT level, 'a_' || level FROM dual CONNECT BY level < 1000;
INSERT INTO d_b(id, s_name) SELECT level, 'b_' || level FROM dual CONNECT BY level < 1000;
INSERT INTO ref_a_b(a_id, b_id) SELECT d_a.id, d_b.id FROM d_a, d_b;
 
BEGIN dbms_stats.gather_schema_stats (ownname =>'DEV',cascade => TRUE); END;
 
SELECT
  b.*
FROM 
  d_b b
WHERE
  b.id IN (
    SELECT
      rf.b_id 
    FROM
      ref_a_b rf
    WHERE
      rf.a_id IN (
        SELECT a.id FROM d_a a WHERE a.s_name = 'a_50'
      )
  );
 
SELECT
  b.*
FROM
  ref_a_b rf,
  d_a a,
  d_b b
WHERE
  rf.a_id = a.id
  AND rf.b_id = b.id
  AND a.s_name = 'a_50';
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
01.01.2014, 14:27
Помогаю со студенческими работами здесь

Vector::swap и std::move - что эффективнее?
Пусть имеется пустой вектор A и заполненный некими данными вектор B. Тогда какой из методов более эффективный: A.swap(B); A =...

Что быстрее/эффективнее malloc/realloc или new/delete?
Всем привет. Год программировал на СИ под микроконтроллеры... Начал изучать с++... Всё ново, интересно... Доковырялся до STL... В процессе...

Что эффективнее SEO или Директ (Бегун, Adwords)
Какая реклама эффективнее для сайта строительной тематики SEO или Директ (Бегун, Adwords) Предлагаем новый отделочный материал, симбиоз...

Кулер на северный мост или обдув сбоку? Что эффективнее?
Добрый день! У меня на матплате (ga 990xa-ud3) очень горячий северный мост. Вначале хотел поставить вместо штатного радиатора кулер...

как эффективнее?
подскажите,как будет лучше поставить кулер залман 10 перфома,от видюхи вверх на выдув,сверху есть дырки для кулеров на 120,или от...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Первый деплой
lagorue 16.01.2026
Не спеша развернул своё 1ое приложение в kubernetes. А дальше мне интересно создать 1фронтэнд приложения и 2 бэкэнд приложения развернуть 2 деплоя в кубере получится 2 сервиса и что-бы они. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит: токи, напряжения и их 1 и 2 производные при t = 0;. . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru