Выборка на MSSQL
Пользователи, просматривающие топик: none
|
Зашли как: Guest
|
Имя |
Сообщение |
<< Старые топики Новые топики >> |
|
|
Выборка на 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->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 перевести?
|
|
|
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 > 20 order by ID стоит помнить что order by ID здесь обязательно нужно.
|
|
|
RE: Выборка на MSSQL - 2008-10-22 14:04:21.276666
|
|
|
_hel_
Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
|
Такой способ я рассматривал. Новости у меня можно удалять и в результате могут образовываться дыры между ID, получится что у меня будут не все новости выводиться, или же будут не с правильных смещений.
|
|
|
RE: Выборка на MSSQL - 2008-10-22 15:29:58.670000
|
|
|
dos 999
Сообщений: 331
Оценки: 0
Присоединился: 2007-12-17 10:49:07.556666
|
А какой MSSQL юзаеш… можно ещё ROWNUMBER использовать, помоему очень подходит в твоём случае
|
|
|
RE: Выборка на MSSQL - 2008-10-22 15:38:55.390000
|
|
|
Pupkin-Zade
Сообщений: 9398
Оценки: 1489
Присоединился: 2004-03-10 13:54:16
|
НИКАК постраничную ВЫБОРКУ ты не сделаешь, это уже все проходили, надо скопом выбирать максимальное кол-во записей и в движке разбивать по страницам
|
|
|
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) работает быстрее.
|
|
|
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
|
|
|
RE: Выборка на MSSQL - 2008-10-23 00:24:11.753333
|
|
|
_hel_
Сообщений: 103
Оценки: 0
Присоединился: 2008-07-09 16:00:40.600000
|
oRb: Этот способ я знаю. Но в том то и дело, что у меня он работает ощутимо медленно. Но раз советуете, то пересмотрю еще раз этот способ днём, может это я где-то накосячил. Спасибо.
|
|
|
RE: Выборка на MSSQL - 2008-10-23 09:20:24.140000
|
|
|
Pupkin-Zade
Сообщений: 9398
Оценки: 1489
Присоединился: 2004-03-10 13:54:16
|
Ну так естественно он работает медленнее предложенного мной, это очевидно Я еще раз утверждаю - кроме как выбора максимального кол-ва другого способа нет
|
|
|
RE: Выборка на MSSQL - 2008-10-23 10:37:04.543333
|
|
|
oRb
Сообщений: 4044
Оценки: 597
Присоединился: 2007-03-28 18:45:06.630000
|
_hel_, ключевая фраза в факе:quote:
В случае с MS SQL придется «изобретать велосипед», что непременно приводит к потере производительности. Так что делай лучше как Пу сказал.
|
|
|
|
|