Kotlin не позволяет указывать универсальные типы без предоставления универсальных типов, если вы не ссылаетесь на не принадлежащий экземпляру класса. (статические внутренние классы, ::class
, сопутствующие методы). Поскольку ViewHolder
является внутренним классом, его идентичность зависит от точной спецификации его внешнего класса, когда речь идет о самом типе.
Это означает, что вы не можете ссылаться на универсальный ExpandableRecyclerAdapter.ViewHolder
, вы должны указать границы, в которых также находится внешний класс. Изменение на ExpandableRecyclerAdapter<T>.ViewHolder
должно решить проблему.
Удостоверьтесь, что Вы ищете на индексированных столбцах без управления данными в тех столбцах (как подстрока и т.д.)
insert into customers
select *
from newcustomers
where customerid not in (select customerid
from customers)
.. может быть более эффективным. Как другие сказали, удостоверьтесь, что у Вас есть индексы на любых полях поиска.
Если Вы можете вообще уменьшать свое пространство задач, то Вы получите "кучу" производительности. Действительно ли Вы абсолютно уверены, что каждые из тех строк в той таблице должны быть проверены?
другая вещь, которую Вы могли бы хотеть попробовать, DELETE InsertTable FROM InsertTable INNER JOIN ExistingTable ON <Validation criteria>
перед Вашей вставкой. Однако Ваш пробег может варьироваться
Первое, что пришло на ум Вы могли попробовать что-то как:
TRUNCATE temptable
INSERT INTO temptable ...
INSERT INTO temptable ...
...
INSERT INTO realtable
SELECT temptable.* FROM temptable
LEFT JOIN realtable on realtable.key = temptable.key
WHERE realtable.key is null
Обратите внимание на другой ответ относительно индексации. НЕ СУЩЕСТВУЕТ, обычно довольно быстро, если у Вас есть хорошие индексы.
, Но я имею , имел проблемы производительности с операторами как Вы, описывают. Один метод, который я раньше обходил, который должен использовать временную таблицу для значений кандидата, выполните УДАЛЕНИЕ ИЗ... ГДЕ СУЩЕСТВУЕТ (...), и затем вслепую ВСТАВЬТЕ остаток. В транзакции, конечно, для предотвращения условий состязания. Разделение запросов иногда позволяет оптимизатору делать свое задание без того, чтобы запутываться.
Попытайтесь заменить НЕ, СУЩЕСТВУЕТ с левым внешним объединением, оно иногда работает лучше в больших наборах данных.
Внешний Применяются, имеет тенденцию работать на меня...
вместо:
from t1
where not exists (select 1 from t2 where t1.something=t2.something)
я буду использовать:
from t1
outer apply (
select top 1 1 as found from t2 where t1.something=t2.something
) t2f
where t2f.found is null