Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Выборка на MSSQL

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Прочее] >> Выборка на MSSQL
Имя
Сообщение << Старые топики   Новые топики >>
Выборка на MSSQL - 2008-10-22 12:50:16.233333   
_hel_

Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
Есть самописный сайт на PHP, и модуль показывающий новости.
Решил я сделать в этом модуле разбивку на страницы.
Всё работает отлично на Mysql. Однако вот реализовать постраничную выборку на MS SQL совсем не получается. Или получается, но медленная выборка идёт.
Записей в таблице больше 1000 (для тестов набил). мне надо выбирать по 20 записей на страницу.
Вот что я использую при работе с Mysql.
$result = Engine::$database-&gt;query( "SELECT news_id, news_author, news_text, user_name, cat_id, cat_name, news_date FROM `news_msg` AS nm JOIN `users` AS u, `news_cat` AS nc WHERE nm.news_author=u.user_id AND nc.cat_id=nm.news_cat ORDER BY news_id " . $order . " LIMIT " . $start . ", " . $count ); Как можно оптимальнее этот скрипт на MS SQL перевести?
Post #: 1
RE: Выборка на MSSQL - 2008-10-22 13:07:32.660000   
dos 999

Сообщений: 331
Оценки: 0
Присоединился: 2007-12-17 10:49:07.556666
LIMIT в MSSQL нету.

например
MySQL => select * from t2 order by t2.ID limit 20, 10
выводит 10 записей начиная с 20

альтернатива в MSSQL
Select * top 10 from t2 where ID &gt; 20 order by ID


стоит помнить что order by ID здесь обязательно нужно.
Post #: 2
RE: Выборка на MSSQL - 2008-10-22 14:04:21.276666   
_hel_

Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
Такой способ я рассматривал. Новости у меня можно удалять и в результате могут образовываться дыры между ID, получится что у меня будут не все новости выводиться, или же будут не с правильных смещений.
Post #: 3
RE: Выборка на MSSQL - 2008-10-22 15:29:58.670000   
dos 999

Сообщений: 331
Оценки: 0
Присоединился: 2007-12-17 10:49:07.556666
А какой MSSQL юзаеш… можно ещё ROWNUMBER использовать, помоему очень подходит в твоём случае
Post #: 4
RE: Выборка на MSSQL - 2008-10-22 15:38:55.390000   
Pupkin-Zade

Сообщений: 9398
Оценки: 1489
Присоединился: 2004-03-10 13:54:16
НИКАК постраничную ВЫБОРКУ ты не сделаешь, это уже все проходили, надо скопом выбирать максимальное кол-во записей и в движке разбивать по страницам
Post #: 5
RE: Выборка на MSSQL - 2008-10-22 20:25:02.580000   
_hel_

Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
dos 999:
Юзаю 2005 экспресс для разработки.
Хочется сохранить совместимость и с 2000-м.
Всё-таки проверю завтра Row Number. Спасибо.

Pupkin-Zade:
Если выбирать все значения и полоскасть их пхп - это сильно нагрузит базу и сервер. Это недопустимо.
Классический вариант постраничной выборки (с NOT IN) работает быстрее.
Post #: 6
RE: Выборка на MSSQL - 2008-10-22 20:48:54.683333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
_hel_, последний вопрос в факе:
http://www.xakep.ru/magazine/xa/114/138/1.asp
Post #: 7
RE: Выборка на MSSQL - 2008-10-23 00:24:11.753333   
_hel_

Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
oRb:
Этот способ я знаю. Но в том то и дело, что у меня он работает ощутимо медленно. Но раз советуете, то пересмотрю еще раз этот способ днём, может это я где-то накосячил. Спасибо.
Post #: 8
RE: Выборка на MSSQL - 2008-10-23 09:20:24.140000   
Pupkin-Zade

Сообщений: 9398
Оценки: 1489
Присоединился: 2004-03-10 13:54:16
Ну так естественно он работает медленнее предложенного мной, это очевидно
Я еще раз утверждаю - кроме как выбора максимального кол-ва другого способа нет
Post #: 9
RE: Выборка на MSSQL - 2008-10-23 10:37:04.543333   
oRb

Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
_hel_, ключевая фраза в факе:
quote:

В случае с MS SQL придется «изобретать велосипед», что непременно приводит к потере производительности.
Так что делай лучше как Пу сказал.
Post #: 10
Страниц:  [1]
Все форумы >> [Прочее] >> Выборка на MSSQL







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.