powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ускорить выполнение запроса
19 сообщений из 19, страница 1 из 1
Ускорить выполнение запроса
    #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
Ускорить выполнение запроса
    #32744824
Alexander Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Врядли получится что то ускорить если применять Like по такому количеству записей.
скан ведь проходит 5300 раз по 115000 строкам.
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744854
Наталья С.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если я правильно поняла, то может переписать запрос так:
SELECT Sheet2.Address FROM Sheet2 LEFT JOIN BlackList
ON Sheet2.Address = BlackList.Field1
WHERE BlackList.Field1 is null;
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744855
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я это понимаю. Но может есть идеи по оптимизации?
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744871
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сделать поля Sheet2.Address и = BlackList.Field1
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744874
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наталья С.Если я правильно поняла, то может переписать запрос так:
SELECT Sheet2.Address FROM Sheet2 LEFT JOIN BlackList
ON Sheet2.Address = BlackList.Field1
WHERE BlackList.Field1 is null;Не совсем так. Поле Field1 содержит знаки "*", которые должны учитываться при сравнении.
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744883
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roma RПопробуй сделать поля Sheet2.Address и = BlackList.Field1А можно более одпробный совет, для чайников?
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744886
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
одпробный = подробный
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744914
Roma R
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извини, отвлекли не дописал
Попробуй сделать поля Sheet2.Address и = BlackList.Field1 индексированными (если это не так конечно). По идее поиск будет проходить быстрее
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744928
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roma RИзвини, отвлекли не дописал
Попробуй сделать поля Sheet2.Address и = BlackList.Field1 индексированными (если это не так конечно). По идее поиск будет проходить быстрееЭто уже так, и было сделано в первую очередь.
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744933
Alexander Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Когда применяется Like то индекс не используется.
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744940
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexander PopovКогда применяется Like то индекс не используется.Спасибо, буду знать...
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32744995
Alexander Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А для чего такие вещи вообше нужны может можно как нибудь их обойти?

посколько колонка называется Address то может стоит как нибудь еe распарсить.
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32745091
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackList - таблица-список порнушных доменов, содержит как правило записи вида *.sex.ru, иногда sex.ru или ИП-адрес.
Ну а Sheet2 - кусок лога из ИСА-сервера, отфильтрованный по некоторому признаку. Это тоже таблица.
Задача: хочу знать, какие адреса, кроме удовлетворяющих блэк-листу, фигурируют в данном куске лога.
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #32745731
Yanis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YanisBlackList - таблица-список порнушных доменов, содержит как правило записи вида *.sex.ru, иногда sex.ru или ИП-адрес.
Ну а Sheet2 - кусок лога из ИСА-сервера, отфильтрованный по некоторому признаку. Это тоже таблица.
Задача: хочу знать, какие адреса, кроме удовлетворяющих блэк-листу, фигурируют в данном куске лога.Неужели это неразрешимая задача?
...
Рейтинг: 0 / 0
Ускорить выполнение запроса
    #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
Ускорить выполнение запроса
    #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
Ускорить выполнение запроса
    #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
Ускорить выполнение запроса
    #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
19 сообщений из 19, страница 1 из 1
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ускорить выполнение запроса
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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