Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ускорить выполнение запроса / 19 сообщений из 19, страница 1 из 1
19.10.2004, 16:18:01
    #32744725
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Сабж, если это возможно.

Собственно, имеется запрос
Код: plaintext
1.
2.
3.
SELECT Sheet2.Address FROM Sheet2, BlackList
WHERE (((Sheet2.Address) Not Like [BlackList].[Field1]))
GROUP BY Sheet2.Address;
При этом BlackList содержит более 115000 записей. Sheet2 - всего 5300 записей; если группировать по Sheet2.Address - то 1300
Выполнения приведенного запроса я дождаться не смог (ждал минут 10)
...
Рейтинг: 0 / 0
19.10.2004, 16:45:23
    #32744824
Alexander Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Врядли получится что то ускорить если применять Like по такому количеству записей.
скан ведь проходит 5300 раз по 115000 строкам.
...
Рейтинг: 0 / 0
19.10.2004, 16:51:47
    #32744854
Наталья С.
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Если я правильно поняла, то может переписать запрос так:
SELECT Sheet2.Address FROM Sheet2 LEFT JOIN BlackList
ON Sheet2.Address = BlackList.Field1
WHERE BlackList.Field1 is null;
...
Рейтинг: 0 / 0
19.10.2004, 16:52:23
    #32744855
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Я это понимаю. Но может есть идеи по оптимизации?
...
Рейтинг: 0 / 0
19.10.2004, 16:55:40
    #32744871
Roma R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Попробуй сделать поля Sheet2.Address и = BlackList.Field1
...
Рейтинг: 0 / 0
19.10.2004, 16:56:28
    #32744874
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Наталья С.Если я правильно поняла, то может переписать запрос так:
SELECT Sheet2.Address FROM Sheet2 LEFT JOIN BlackList
ON Sheet2.Address = BlackList.Field1
WHERE BlackList.Field1 is null;Не совсем так. Поле Field1 содержит знаки "*", которые должны учитываться при сравнении.
...
Рейтинг: 0 / 0
19.10.2004, 16:58:15
    #32744883
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Roma RПопробуй сделать поля Sheet2.Address и = BlackList.Field1А можно более одпробный совет, для чайников?
...
Рейтинг: 0 / 0
19.10.2004, 16:58:57
    #32744886
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
одпробный = подробный
...
Рейтинг: 0 / 0
19.10.2004, 17:09:32
    #32744914
Roma R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Извини, отвлекли не дописал
Попробуй сделать поля Sheet2.Address и = BlackList.Field1 индексированными (если это не так конечно). По идее поиск будет проходить быстрее
...
Рейтинг: 0 / 0
19.10.2004, 17:14:17
    #32744928
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Roma RИзвини, отвлекли не дописал
Попробуй сделать поля Sheet2.Address и = BlackList.Field1 индексированными (если это не так конечно). По идее поиск будет проходить быстрееЭто уже так, и было сделано в первую очередь.
...
Рейтинг: 0 / 0
19.10.2004, 17:16:58
    #32744933
Alexander Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Когда применяется Like то индекс не используется.
...
Рейтинг: 0 / 0
19.10.2004, 17:19:34
    #32744940
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Alexander PopovКогда применяется Like то индекс не используется.Спасибо, буду знать...
...
Рейтинг: 0 / 0
19.10.2004, 17:36:00
    #32744995
Alexander Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
А для чего такие вещи вообше нужны может можно как нибудь их обойти?

посколько колонка называется Address то может стоит как нибудь еe распарсить.
...
Рейтинг: 0 / 0
19.10.2004, 18:04:30
    #32745091
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
BlackList - таблица-список порнушных доменов, содержит как правило записи вида *.sex.ru, иногда sex.ru или ИП-адрес.
Ну а Sheet2 - кусок лога из ИСА-сервера, отфильтрованный по некоторому признаку. Это тоже таблица.
Задача: хочу знать, какие адреса, кроме удовлетворяющих блэк-листу, фигурируют в данном куске лога.
...
Рейтинг: 0 / 0
20.10.2004, 10:04:53
    #32745731
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
YanisBlackList - таблица-список порнушных доменов, содержит как правило записи вида *.sex.ru, иногда sex.ru или ИП-адрес.
Ну а Sheet2 - кусок лога из ИСА-сервера, отфильтрованный по некоторому признаку. Это тоже таблица.
Задача: хочу знать, какие адреса, кроме удовлетворяющих блэк-листу, фигурируют в данном куске лога.Неужели это неразрешимая задача?
...
Рейтинг: 0 / 0
20.10.2004, 10:29:30
    #32745789
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Самое тривиальное:

Код: plaintext
1.
2.
3.
SELECT Sheet2.Address FROM 
(select Address FROM Sheet2 GROUP BY Address) as S, BlackList
WHERE (((S.Address) Not Like [BlackList].[Field1]))
GROUP BY S.Address;

Менее тривиальное
Код: plaintext
1.
2.
3.
SELECT Sheet2.Address FROM 
(select Address FROM GROUP BY Address) Sheet2 LEFT OUTER JOIN BlackList 
ON Sheet2.Address Like [BlackList].[Field1]
WHERE [BlackList].[Field1] is null;

все ж не CROSS JOIN...
...
Рейтинг: 0 / 0
20.10.2004, 10:31:05
    #32745795
aleks2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Прадон, второй вариант следует читать

Код: plaintext
1.
2.
3.
SELECT S.Address FROM 
(select Address FROM Sheet2 GROUP BY Address) as S LEFT OUTER JOIN BlackList 
ON S.Address Like [BlackList].[Field1]
WHERE [BlackList].[Field1] is null;
...
Рейтинг: 0 / 0
20.10.2004, 11:00:39
    #32745882
Roma R
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Попробуй такой запрос
SELECT [Sheet2].[Address]
FROM Sheet2
WHERE (((Exists (SELECT Sheet2.Address FROM Sheet2 as t, BlackList WHERE Sheet2.Address Like '*' &[BlackList].[Field1] & '*';))=False));

Или

SELECT [Sheet2].[Address]
FROM Sheet2
WHERE (((Exists (SELECT Sheet2.Address FROM Sheet2 as t, BlackList WHERE Sheet2.Address Like [BlackList].[Field1] ;))=False));
...
Рейтинг: 0 / 0
26.10.2004, 15:46:55
    #32755224
Yanis
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ускорить выполнение запроса
Задача решилась написанием следующей программки:
Код: 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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
Sub inBlackList()
    Dim lst() As String
    Dim lst2() As String
    Dim Cnt As Long
    Dim Cnt2 As Long
    
    Cnt = tbl2lst("BlackList", "field1", lst)
    Cnt2 = tbl2lst("Query2-result", "Address", lst2)
    
    Dim i As Long
    Dim j As Long
    
    CurrentDb.Execute ("DELETE * FROM tblInBlackListSub")
    For i =  1  To Cnt
        For j =  1  To Cnt2
            If lst2(j) Like lst(i) Then
                CurrentDb.Execute ("INSERT INTO tblInBlackListSub (Address) VALUES ('" & lst2(j) & "')")
            End If
        Next
    Next
End Sub

Function tbl2lst(tblName As String, fieldName As String, lstName() As String) As Long
    Dim rs As DAO.Recordset
    Dim i As Long
    Set rs = CurrentDb.OpenRecordset("SELECT [" & fieldName & "] FROM [" & tblName & "]")
    If rs.RecordCount >  0  Then
        rs.MoveLast
        rs.MoveFirst
        i =  1 
        ReDim lstName(rs.RecordCount)
        Do While Not rs.EOF
            lstName(i) = rs(fieldName)
            i = i +  1 
            rs.MoveNext
        Loop
    End If
    rs.Close
    tbl2lst = i -  1 
End Function
Времы выполнения - примерно 3 минуты.

При этом на выполнение запроса
Код: plaintext
1.
2.
SELECT [Query2-result].Address INTO tblInBlackList
FROM BlackList, [Query2-result]
WHERE ((([Query2-result].Address) Like [BlackList].[Field1]));
тратится примерно 15 минут.

Вывод: при таком количестве сравнений Акцесс не справляется с кэшированием данных (если он вообще их кэширует:) и гораздо быстрее создавать огромные массивы в памяти, чем обращаться к таблицам.
...
Рейтинг: 0 / 0
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ускорить выполнение запроса / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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