Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Уважаемые господа!
Прошу помогите хотя бы в 2-х словах. Ищу книги в разных таблицах (Базах) и составляю на найденные id Библиографическое описание. Типичный запрос на 2 базы и два поля поиска (автор) и ключевое слово.

select distinct v.docid, v.BO, V.[as],V.Sigla from libra1.dbo.book_bo V
  JOIN library2.dbo.book_01003X P0 ON V.docid=P0.docid
  JOIN library2.dbo.book_01003 X0 ON P0.ItemId = X0.ItemId

  JOIN library2.dbo.book_01010X P1 ON V.docid=P1.docid
  JOIN library2.dbo.book_01010 X1 ON P1.ItemId = X1.ItemId
WHERE X0.Item like '%альбеков%' and X1.Item like '%логистика%' 

UNION 

select distinct v.docid, v.BO, V.[as],V.Sigla from libra1.dbo.turseu_bo V
  JOIN library2.dbo.turseu_01003X P0 ON V.docid=P0.docid
  JOIN library2.dbo.turseu_01003 X0 ON P0.ItemId = X0.ItemId
  
  JOIN library2.dbo.turseu_01010X P1 ON V.docid=P1.docid
  JOIN library2.dbo.turseu_01010 X1 ON P1.ItemId = X1.ItemId
WHERE X0.Item like '%альбеков%' and X1.Item like '%логистика%' 


Сначала ищется ID во вспомогательных таблицах двумя JOIN, затем на них создается БО
В выборке обычно до сотни книг. Базы небольшие, самая большая-200 000. Но работает что- то медленно даже на пару баз.
Этот запрос в среде Management Studio- 12 сек. А в браузере- еще дольше.

Проблема- можно ли ускорить запрос. Он генерируется на основании выбора пользователя.

Типичная таблица для автора
book_00103
-----------
ItemID Item
33993 Литвак,М. Е.-авт.
33994 Ландреви,Ж.-авт.
33995 Леви,Ж.-авт.
33996 Линдон,Д.-авт.
33997 Сиссорс,Дж. З.-авт.
33998 Бэрон,Р. Б.-авт.

book_00103x
------------
ItemID DocID
37253 472
33846 2
33847 3

DocId- ключ в БД, где хранится описание книги.
К основной БД имею доступ только на чтение
19 ноя 14, 10:52    [16870026]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
topdon,

Перед выполнением запроса выполните это и покажите результат
SET SHOWPLAN_text on
Go

иначе сложно что-то сказать.
19 ноя 14, 11:18    [16870230]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
aleks2
Guest
WarAnt
topdon,

Перед выполнением запроса выполните это и покажите результат
SET SHOWPLAN_text on
Go

иначе сложно что-то сказать.


Нафига план?
Когда тредстартер и лыка не вяжет?

Один тока distinct вкупе с union - доставляют.
19 ноя 14, 11:25    [16870288]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
aleks2
WarAnt
topdon,

Перед выполнением запроса выполните это и покажите результат
SET SHOWPLAN_text on
Go

иначе сложно что-то сказать.


Нафига план?
Когда тредстартер и лыка не вяжет?

Один тока distinct вкупе с union - доставляют.


Это понятно, смешно но не критично, а ТС просил в двух словах, поэтому show on:)
19 ноя 14, 11:34    [16870355]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
WarAnt,

К БД library2 я имею доступ на чтение.

Сообщение 262, уровень 14, состояние 4, строка 1
SHOWPLAN permission denied in database 'LIBRARY2'.
19 ноя 14, 11:37    [16870394]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
topdon
WarAnt,

К БД library2 я имею доступ на чтение.

Сообщение 262, уровень 14, состояние 4, строка 1
SHOWPLAN permission denied in database 'LIBRARY2'.


о каком ускорении тогда речь? вы наверное и структуру таблиц не знаете и какие там индексы тоже не ведаете?
19 ноя 14, 11:39    [16870404]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
WarAnt,
внешний запрос select distinct выполняется на найденные книги, их немного обычно.
Union соединяет запросы к каждой базе. Тут нужно учесть, чтобы запрос можно было бы построить в цикле
на php в зависимости от выборки. я другого способа не нашел.
19 ноя 14, 11:42    [16870444]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
внешний запрос select distinct выполняется на найденные книги, их немного обычно.
Union соединяет запросы к каждой базе. Тут нужно учесть, чтобы запрос можно было бы построить в цикле

Это вы пересказываете план запроса ?
Или вы просто не в курсе что UNION и так делает distinct ?
19 ноя 14, 11:44    [16870464]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
правда с такими like-ми в where у вас всё равно ничего не ускорится
19 ноя 14, 11:46    [16870484]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
topdon
WarAnt,

К БД library2 я имею доступ на чтение.

Сообщение 262, уровень 14, состояние 4, строка 1
SHOWPLAN permission denied in database 'LIBRARY2'.


и чего вы хотите тогда от нас?
я лично по фотографии лечить не научился еще, может подтянутся ясновидящие, так что ждите.

если конечно посмотреть в мою пустую от кофе чашку то вырисовываются следующие варианты:
1. нет нужных индексов, а точнее ни одного даже кластерного.
2. сервер унылое Г.
3. статистику обновляли последний раз когда умер Брежнев.
4. Таблицы на самом деле не таблицы, а вьюхи на удаленные объекты.
5. и да на засыпку, это "Item like '%альбеков%'" в принципе не может работать быстро.
19 ноя 14, 11:47    [16870489]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Konst_One,
Структуру таблиц я привел кроме основной.
Таблицы неиндексированы. Они созданы в рамках купленной когдато АБИС.
19 ноя 14, 11:48    [16870505]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Taffy
Member

Откуда:
Сообщений: 20501
а что, docid может повторяться?
зачем дистинкты?

а в двух таблицах одни и те же сведения про разные книги?
зачем union без all?
19 ноя 14, 11:49    [16870512]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
aleks2
Guest
Даже так
select v.docid, v.BO, V.[as],V.Sigla 
   from libra1.dbo.book_bo V
       right outer join
       (select docid form library2.dbo.book_01003X P0 ON V.docid=P0.docid JOIN library2.dbo.book_01003 X0 ON P0.ItemId = X0.ItemId WHERE X0.Item like '%альбеков%'
        intersect
        select docid form library2.dbo.book_01010X P1 ON V.docid=P1.docid JOIN library2.dbo.book_01010 X1 ON P1.ItemId = X1.ItemId WHERE X1.Item like '%логистика%'
       ) X on V.docid=X.docid
UNION ALL
... -- сами перепишите

будет быстрее.

А если заколбасить временные таблицы - будет ишо прытче.
19 ноя 14, 11:49    [16870518]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Konst_One
Member

Откуда:
Сообщений: 11621
topdon
Konst_One,
Структуру таблиц я привел кроме основной.
Таблицы неиндексированы. Они созданы в рамках купленной когдато АБИС.



где?
я не вижу скрипта на создание этих таблиц
19 ноя 14, 11:50    [16870524]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
topdon,

А говорили, что убрали DISTINCT: Неожиданная проблема с UNION

Соврали?
19 ноя 14, 11:54    [16870569]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
topdon,

like %альбеков%

я ищу в данном случае по автору, это часть поля Item, а как еще искать?
По точной фразе- но она может быть неизвестна.

По ответам выходит, что существенно ускорить нельзя.

Теперь насчет distinct
это делается в цикле для каждой базы. Если она одна, то distinct обязателен, не так ли?

Просто получается, нужно у всех запросов, кроме первого, убрать distinct здесь это многого
не даст.
19 ноя 14, 12:08    [16870704]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
aleks2
Guest
topdon
Просто получается, нужно у всех запросов, кроме первого, убрать distinct здесь это многого
не даст.


Аффтор склонен к схоластическим рассуждениям.
19 ноя 14, 12:17    [16870757]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Ruuu
Member

Откуда: Иркутск
Сообщений: 4272
topdon
like %альбеков%
я ищу в данном случае по автору, это часть поля Item, а как еще искать?
Погуглите sql-server полнотекстовый поиск
19 ноя 14, 12:21    [16870776]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Ruuu,

Прямо- таки соврал... Не помню уже эту ошибку и как от нее избавился.
19 ноя 14, 12:21    [16870780]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
WarAnt
Member

Откуда: Питер
Сообщений: 2423
topdon
topdon,

like %альбеков%

я ищу в данном случае по автору, это часть поля Item, а как еще искать?
По точной фразе- но она может быть неизвестна.

По ответам выходит, что существенно ускорить нельзя.

Теперь насчет distinct
это делается в цикле для каждой базы. Если она одна, то distinct обязателен, не так ли?

Просто получается, нужно у всех запросов, кроме первого, убрать distinct здесь это многого
не даст.


Почитайте уже наконец Bol про union, стразу станет понятно про distinct

Чтобы искать быстро по произвольному набору символов в произвольном месте поля существует Full-Text Search, иначе вы почти всегда попадаете на index scan
19 ноя 14, 12:24    [16870805]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
WarAnt,
Уже начал разбираться с Full text search,
но- он точно работает для русского языка?

http://www.cybersecurity.ru/manuals/data/mssql/2537.html
 Благодаря этим предикатам и функциям можно создавать различные полнотекстовые запросы, но к сожалению в SQL Server изначально не реализована возможность полнотекстового поиска на русском, украинском языках. 
19 ноя 14, 21:49    [16874803]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
но- он точно работает для русского языка?

Ну если читать статьи 10летней давности, то да, не работает для русского
19 ноя 14, 21:59    [16874851]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,

Но у меня, к сожалению, 2005 сервер. Ну, попробую сначала дома на SQL express.
19 ноя 14, 23:03    [16875177]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
Glory
Member

Откуда:
Сообщений: 104751
topdon
Но у меня, к сожалению, 2005 сервер.

В 2004году, когда была написана ваша статья, еще не было SQL2005
19 ноя 14, 23:15    [16875246]     Ответить | Цитировать Сообщить модератору
 Re: Ускорить запрос  [new]
topdon
Member

Откуда: Ростов- на- Дону
Сообщений: 564
Glory,
выполнил запросы к серверу на работе

select SERVERPROPERTY('IsFullTextInstalled')
отсутствует имя столбца
1

полнотекстовый поиск есть. Теперь
select * from sys.fulltext_languages
lcid name
-----------------------
2052 Simplified Chinese
1028 Traditional Chinese
1031 German
2057 British English
1033 English
3082 Spanish
1036 French
1040 Italian
1041 Japanese
1042 Korean
0 Neutral
1043 Dutch
1053 Swedish
1054 Thai
3076 Chinese (Hong Kong SAR, PRC)
5124 Chinese (Macau SAR)
4100 Chinese (Singapore)

И что, будет работать?
20 ноя 14, 10:44    [16876631]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Microsoft SQL Server Ответить