Главная Новые темы Список тем Задать вопрос Поиск  

Форум "DataBase и SQL"


Язык запросов баз даных


 #0 DrewBlin © 13.10.07 15:26:32 - 16.10.07 11:00:36

Убыстрение запроса



Всем привет! Помогите, пожалуйста, советом. Есть такая выборка:

select p.a,p.b,p.c from table_p p, (select a,b,c from table_p p where c in (12,13,14)) s
where p.a<=s.a and p.b>=s.b

(внутренняя выборка делается по более сложному условию). Внутренняя выполняется за 0.001 сек. Вся целиком - за 2.43 сек.
Если вместо >= и <= писать просто = , то время выполнению 0.003. (Такой эксперимент проводил исключительно чтоб найти что тормозит выполнение). Индексы созданы, в таблице порядка 100 000 записей. Результат внутреннего запроса - около 30 записей. СУБД MySQL 5

А теперь сам вопрос: можно ли заставить (если да - то как) эту выборку работать быстрее? Цитата

 #1 Мао Ля © 14.10.07 00:58:27

А если с джойном попробовать?

select p.a,p.b,p.c from table_p p
  JOIN table_p s ON s.c in (12,13,14) AND p.a <= s.a AND p.b >= s.b
 #2 DrewBlin © 14.10.07 17:15:33

Неа. К сожалению джойн только замедляет, причем значительно...  
 #3 Andrey © 15.10.07 15:27:02

А какие индексы созданы? По каким полям?
По (table_p.a, table_p.b) есть? По (table_p.c)?
А они используется? Какова их селективность? Каков план выполнения запроса? Каков размер финальной выборки?

Чем-то чую что задачка связана с определением пересечения временных интервалов.
 #4 ZeroDivide © 16.10.07 11:00:36

Поменяй их местами

select p.a,p.b,p.c from (select a,b,c from table_p p where c in (12,13,14)) s, table_p p
where p.a<=s.a and p.b>=s.b




  • Написать ответ

    Имя: Регистрация HTML?
    smiles смайлики
    Потом перейти в:    
    паутина



      ©  webest.net, 2002-2007  

    top.mail.ru
    » Бесплатный счетчик посещений
    » Рейтинг сайтов