Попробуйте использовать словарное понимание:
import string
print({k:max(i.count(k) for i in words) for k in string.ascii_lowercase})
Может быть несколько объяснений того, почему ваш запрос занимает много времени:
SELECT NULL FROM tablename WHERE colname =: value FOR UPDATE NOWAIT
, ON DELETE TRIGGER
, который выполняет дополнительную работу, НЕИНДЕКСИРОВАННЫХ ОГРАНИЧЕНИЙ ССЫЛКИ
, указывающих на эту таблицу (есть сценарий от AskTom , который поможет вам определить, существуют ли такие неиндексированные внешние ключи) . Возможно, ваша таблица связана с несколькими таблицами и имеет огромное количество строк.
Насколько селективен этот индекс? Если в вашей таблице один миллион строк и это значение достигает ста пятидесяти тысяч из них, ваш индекс бесполезен. Фактически, это может быть хуже, чем бесполезно, если оно действительно используется. Помните, что оператор DELETE похож на оператор SELECT: мы можем настроить его путь доступа.
Кроме того, операции удаления занимают много места в табличном пространстве отмены, поэтому вы можете пострадать от конфликта, если система интенсивно используется. В многопользовательской системе другой сеанс может заблокировать строки, которые вы хотите удалить.
У вас есть триггеры ON DELETE? У вас есть ограничения внешнего ключа ON DELETE CASCADE?
Edit: Учитывая все, что вы говорите, и особенно столбец, о котором идет речь, является первичным ключом, поэтому вы пытаетесь удалить одну строку, если это занимает много времени, гораздо более вероятно, что какой-то другой процесс или пользователь заблокировал строку. Что-нибудь отображается в V $ LOCK
?
В вашей таблице содержится больше записей?
Есть ли на сервере базы данных какие-то рекурсивные программы (вложенные циклы и т. Д.)?
Проверить сетевые проблемы, если сервер базы данных находится на разных машинах?
Если что-то тормозит, и вы не знаете почему, отследите это и выясните.
Как мне устранить проблемы с производительностью с помощью оператора Oracle SQL