Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Новости для web-сервера в Interbase / 5 сообщений из 5, страница 1 из 1
12.08.2003, 10:53
    #32233688
Serge N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новости для web-сервера в Interbase
Пишу на Delphi ISAPI-скрипт для сайта под IIS
Хочу хранить ленту новостей в Interbase в поле varchar(4000)
Каждое сообщение хранится в виде html-текста в этом поле
Использую Interbase 5.6
Показываю по 10 новостей на странице
Для их выборки написал хранимую процедуру, которая возвращает по 10 записей с нужным смещением и возможностью поиска по подстроке.

Код: plaintext
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.
CREATE PROCEDURE NEWS_PAGE (
  FIRSTROW INTEGER, 
  NUMROWS INTEGER,
  MAN VARCHAR( 100 )
) RETURNS (
  NEWS_ID INTEGER,
  NEWS_DATE TIMESTAMP,
  TITLE_ VARCHAR( 200 ),
  TEXT_ VARCHAR( 4000 ),
) AS    

DECLARE VARIABLE i  INTEGER;

begin
  i= 0 ;
  FOR
    SELECT NEWS_ID,NEWS_DATE,TITLE_,TEXT_
    FROM NEWS
    WHERE ((:MAN IS NULL) OR ( TITLE_ || TEXT_ like '%' || :MAN || '%'))
    ORDER BY NEWS_ID DESC
    INTO :NEWS_ID,:NEWS_DATE,:TITLE_,:TEXT_
  DO
  begin
    i=i+ 1 ;
    if (i-FIRSTROW>=NUMROWS) then EXIT;
    if (i>=FIRSTROW) then SUSPEND;
  end
end



Но я заметил, что при количестве записей где-то за тысячу, выборка начинает притормаживать. Насколько я понимаю тысяча записей - это не объем для sql-сервера.
Что я делаю не правильно? Может есть какие-то стандартные методы изготовления таких лент новостей? Как сделать, чтобы работало быстро?
...
Рейтинг: 0 / 0
12.08.2003, 11:11
    #32233718
Dnico
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новости для web-сервера в Interbase
А что это за конструкция такая ?

Код: plaintext
1.
WHERE ((:MAN IS NULL) OR ( TITLE_ || TEXT_ like '%' || :MAN || '%'))
...
Рейтинг: 0 / 0
12.08.2003, 11:22
    #32233738
StarWind
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новости для web-сервера в Interbase
понимаешь ты верно, вот только чувствую индексов у тя нет и наврятли они смогут работать...
like вообще не работает с индексами, а конструкция "TITLE_ || TEXT_ " тем более
если тебе хочется полнотекстовый поиск, то в IB я такого не встречал. Хотя поищи на всякий случай, может и найдешь. Полнотекстовй работает по индексу, именно поэтому не загибается скажем яндекс
...
Рейтинг: 0 / 0
12.08.2003, 13:06
    #32233942
Zmeishe
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новости для web-сервера в Interbase
К тому же
WHERE ((:MAN IS NULL) OR ( TITLE_ || TEXT_ like '%' || :MAN || '%'))

OR означает двойной проход по данным
сначала (:MAN IS NULL)
затем ( TITLE_ || TEXT_ like '%' || :MAN || '%')
...
Рейтинг: 0 / 0
19.08.2003, 12:58
    #32240141
Serge N
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Новости для web-сервера в Interbase
То, что я делаю не правильно, я понимаю.
Но КАК сделать правильно? Чтобы работало быстро и с возможностью поиска по тексту новости?
...
Рейтинг: 0 / 0
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Новости для web-сервера в Interbase / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]