мне нужно, чтобы установить значение в моей основной таблице из таблицы перекодировки, как это:Как ускорить HSQLDB UPDATE от SELECT?
UPDATE primary
SET primary.value =
(SELECT lookup.value FROM lookup WHERE primary.key = lookup.key)
Ключа является полем VARCHAR в обеих таблицах и имеет индекс в основной таблице и уникальный индекс в Справочная таблица.
Обе таблицы имеют диапазон около 10 миллионов строк.
Это занимает невероятно долгое время с HSQLDB 2.3 на быстром сервере с 12 ядрами и выделенном 15 Гб пространства.
Что я должен знать, чтобы максимально ускорить эту операцию? Есть ли что-то, что я мог бы сделать массово неправильно, чтобы производительность могла сильно пострадать? Имеет ли серьезный эффект максимальный размер задействуемого ключевого поля VARCHAR?
Я видел, что в теории существуют альтернативные способы, как это сделать в SQL, о которых люди заявили, что они намного быстрее, но HSQLDB, похоже, не поддерживает ни один из них.
Что такое «невероятно долго»? – halfbit
Пожалуйста, разместите определенные индексы в соответствующих таблицах. Вы попробовали заявление 'MERGE'? Вы можете присоединиться к нему. –
И на самом деле вопрос: почему вы делаете это обновление в первую очередь? Если 'primary.key' ссылается на таблицу' lookup', вы всегда можете присоединиться к таблице 'lookup' в ваших запросах. Насколько я могу судить, вы фактически дублируете данные, на которые ссылается внешний ключ. –