Альтернатива SQL выполнению ВНУТРЕННЕГО ОБЪЕДИНЕНИЯ на единственной таблице

Если бы Вы считаете ASP.NET, я сказал бы, что жизненный цикл веб-форм является довольно большим глюком мне. Я провел бесчисленные часы, отлаживая плохо записанный код веб-форм, просто потому что много разработчиков просто действительно не понимает, когда использовать, какой обработчик событий (меня включал, печально).

5
задан cruzja 9 July 2010 в 17:52
поделиться

3 ответа

Мне понадобится дополнительная информация для диагностики проблемы со скоростью, но чтобы удалить дубли, добавьте это в ГДЕ:

AND F.source<S.source
2
ответ дан 14 December 2019 в 19:20
поделиться

Если токен не проиндексирован, он обязательно должен быть.

1
ответ дан 14 December 2019 в 19:20
поделиться

Попробуйте следующее:

SELECT token, GROUP_CONCAT(source), SUM(count)
FROM TokenFrequency
GROUP BY token;

Это должно работать намного быстрее, а также устранить дубликаты. Но источники будут возвращены в виде списка, разделенного запятыми, поэтому вам придется разложить его в своем приложении.

Вы также можете попробовать создать составной индекс по столбцам token, source, count (в указанном порядке) и проанализируйте с помощью EXPLAIN , чтобы увидеть, достаточно ли умен MySQL, чтобы использовать его в качестве покрывающего индекса для этого запроса.


обновление: Мне кажется, неправильно поняли ваш вопрос. Вам не нужна сумма счетчиков на токен, вам нужна сумма счетчиков для каждой пары источников для данного токена.

Я считаю, что внутреннее соединение - лучшее решение для этого. Важным правилом для SQL является то, что если вам нужно вычислить выражение для двух разных строк, тогда вам нужно выполнить соединение.

Однако один из методов оптимизации, о котором я упоминал выше, заключается в использовании покрывающего индекса , чтобы все нужные столбцы были включены в структуру данных индекса. Преимущество состоит в том, что все операции поиска выполняются O (log n), и запросу не требуется выполнять второй ввод-вывод для чтения физической строки и получения других столбцов.

В этом случае вы должны создать покрытие индекс по столбцам токен, источник, счетчик , как я упоминал выше. Также попробуйте выделить достаточно места в кэше, чтобы индекс можно было кэшировать в памяти.

Для чтения физической строки и получения других столбцов необходимо выполнить второй ввод-вывод.

В этом случае вы должны создать покрывающий индекс по столбцам token, source, count , как я упоминал выше. Также попробуйте выделить достаточно места в кэше, чтобы индекс можно было кэшировать в памяти.

Для чтения физической строки и получения других столбцов необходимо выполнить второй ввод-вывод.

В этом случае вы должны создать покрывающий индекс по столбцам token, source, count , как я упоминал выше. Также попробуйте выделить достаточно места в кэше, чтобы индекс можно было кэшировать в памяти.

2
ответ дан 14 December 2019 в 19:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: