Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Безнадёга, :( 
:(
    Опции темы
Artemon
Дата 5.2.2006, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Была у меня программа, которая довольно сносно работала с текстовыми базами (самодельными)

пример:

{art}ARTIST
{alb}ALBUM
{gen}GENRE
.........
........
.......


Была у меня текстовая БД в 5 mb, я ее полностю грузил в оперативку , а там уже работал с ней.

Решил перейти на реляционные БД.

За месяц переделал прогу с текстовых БД на MSSQL.

ОООООООООООООО ужас поиск в MSSQL происходит медленее чем в тексте, загруженном в память.


Разве так может быть??????????????????????


P.S.
Произвожу поиск по тексту. (%ANY_TEXT%)


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
useless
Дата 5.2.2006, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 123
Регистрация: 18.5.2004

Репутация: нет
Всего: 1



Раслабься, так и должно быть!!!!
Всё, что загружено в оперативку, обрабатывается быстрее, чем то что храниться в БД.

Выгоду от использования любой СУБД можно получить только при работе в режиме многопользовательского доступа.


--------------------
Лучше день потерять, потом за 5 минут долететь !!!
PM MAIL ICQ   Вверх
ТоляМБА
Дата 6.2.2006, 06:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Котэ
***


Профиль
Группа: Завсегдатай
Сообщений: 1607
Регистрация: 15.12.2004

Репутация: нет
Всего: 252



4 Artemon БД ведь у тебя лежит на винте. Посмотри скорость доступа к винту и скорость доступа к оперативке и сразу всё поймешь.
PM   Вверх
Artemon
Дата 6.2.2006, 08:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Жестоко.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Vit
Дата 6.2.2006, 15:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Хм... Возможно дело в неправильной оптимизации. MS SQL Server достаточно по умному кэширует данные и оставляет запрашиваемые данные в оперативке. Лучше приведи примеры запросов которые тормозят и структуру таблиц на которых они проходят.


PS. Базы данных действительно не дадут выигрыша в скорости на небольших массивах данных, потому как неизбежны накладные расходы в виде ретрансляции потоков данных из одной программы в другую, многоступенчатые преобразования: программа-драйверБД-сервер-данные, компилляция запросов и т.д. Но у баз данных есть неоспоримые преимущества - они дают значительное увеличение производительности на больших масивах данных или при многопользовательском использовании, делают системы легко расширяемыми и дают существенные удобства в манипулировании данными.





--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Artemon
Дата 6.2.2006, 16:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Вот у меня какой самый тормозной запрос

Код

SELECT ALBUM, YEAR, PATH, ARTIST, GENRE, ALBUMS.ID_ALBUM, SONG
FROM ALBUMS, ARTISTS, GENRES, SONGS 
WHERE SONG LIKE '" + NormalizeSQL_QUERY(Context) + "%' ESCAPE '" + ESC_TOKEN + "' "
AND ALBUMS.ID_ALBUM = SONGS.ID_ALBUM
AND ALBUMS.ID_ARTIST = ARTISTS.ID_ARTIST 
AND ARTISTS.ID_GENRE = GENRES.ID_GENRE
ORDER BY ARTIST 



P.S.
В каждой таблице не больше 40000 строк



--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Vit
Дата 6.2.2006, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Мдя... Ты делаешь декартово произведение... Реально ищется не через 40000, а через 40000*На ARTISTS * на GENRES * SONGS, т.е. реально сервер лопатит десятки миллионов записей.

Чтобы сделать это по человечески наду применить Join (Inner или Outer в зависимости от задачи)

Что-то вроде:
Код


SELECT ALBUM, YEAR, PATH, ARTIST, GENRE, ALBUMS.ID_ALBUM, SONG
FROM ALBUMS with (nolock)
left outer join ARTISTS with (nolock) on ALBUMS.ID_ARTIST = ARTISTS.ID_ARTIST 
left outer join GENRES with (nolock) on ARTISTS.ID_GENRE = GENRES.ID_GENRE
left outer join SONGS with (nolock) on ALBUMS.ID_ALBUM = SONGS.ID_ALBUM
WHERE SONG LIKE '" + NormalizeSQL_QUERY(Context) + "%' ESCAPE '" + ESC_TOKEN + "' "
ORDER BY ARTIST 


Кроме того надо поставить индекс на поле SONG, желательно кластерный

Если это не поможет, тогда надо будет ещё поработать над оптимизацией.

PS. на 40000 записей сервер должен искать практически мгновенно, никак не долее 1 секунды, если дольше - то проблемы с запросом или структурой данных


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
boevik
Дата 7.2.2006, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



Vit, ты не прав. Artemon использовал inner join по старой системе, так что у него не получилось декартово произведение.


--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
Vit
Дата 7.2.2006, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Цитата(boevik @ 7.2.2006, 00:13 Найти цитируемый пост)

Vit, ты не прав. Artemon использовал inner join по старой системе, так что у него не получилось декартово произведение.



Вроде как то, что он использовал - это "Cross Join" по старой системе, но я могу ошибаться, сейчас посмотрю как MS SQL Server меняет план выполнения запроса в этом стиле...
Добавлено @ 16:03
Ага, ты прав... Inner Join получается... Тогда, Artemon присылай базу данных, попробую покрутить у себя и подумать как сделать её побыстрее... В любом случае на 40K записей практически любые запросы должны выполняться практически мгновенно...


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Artemon
Дата 8.2.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



Vit, огромное спасибо, но нет возможности выслать базу.


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
Vit
Дата 8.2.2006, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Vitaly Nevzorov
****


Профиль
Группа: Экс. модератор
Сообщений: 10964
Регистрация: 25.3.2002
Где: Chicago

Репутация: 5
Всего: 207



Тогда смотри сам в Query Analyser чего твоя квери делает и какая операция жрёт время. Индексы ставить не пробовал?

На вскидку нужны индексы по следующим полям

ALBUMS.ID_ARTIST =
ARTISTS.ID_ARTIST
ARTISTS.ID_GENRE
GENRES.ID_GENRE
ALBUMS.ID_ALBUM
SONGS.ID_ALBUM
SONG

Желательно кластерный индекс по полю SONG


--------------------
With the best wishes, Vit
I have done so much with so little for so long that I am now qualified to do anything with nothing
Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru
PM MAIL WWW ICQ   Вверх
Artemon
Дата 8.2.2006, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: нет
Всего: 20



А что значит кластерный?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
boevik
Дата 8.2.2006, 22:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1452
Регистрация: 31.5.2004
Где: Израиль

Репутация: 15
Всего: 35



В селекте участвует 4 таблицы, если в них нет индексов то происходит довольно ощутимое сканирование таблиц.
Желательно, а то и обязательно индексы по полям:
ID_ALBUM в таблицах ALBUMS и SONGS
ID_ARTIST в таблицах ALBUMS и ARTISTS
ID_GENRE в таблицах ARTISTS и GENRES



--------------------
Никогда не говори никогда
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "MS SQL"
Akina

Akina

Запрещается!

Публиковать ссылки и обсуждать взлом чего бы то ни было.

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы составления неспецифических запросов рассматриваются здесь
  • Используйте теги [code=sql][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Zloxa, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MS SQL Server | Следующая тема »


 




[ Время генерации скрипта: 0.0552 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.