Оптимизация Sql-запросов, необходимая для MS access 2010
У меня есть таблица MyTable, в которой элементы хранятся со своим индивидуальным ссылочным кодом, ReferenceCode, но существуют различные версии каждого ссылочного кода, поскольку элементы были обновлены с течением времени, так что мы можем вернуться к историческим записям для каждого ссылочного кода.
Я написал некоторый SQL, который извлекает записи с самым высоким номером версии, чтобы извлечь самую новую версию каждого ссылочного кода и дать мне "живую" таблицу. Однако, кажется, что извлечение данных в таблицу занимает целую вечность (5,5 минут!) - и это в самом доступе!
В таблице содержится около 16 000 записей, и чуть более половины из них являются текущими живыми версиями. В таблице около 20 полей, и да, мне действительно нужно выбрать *.
Есть ли более быстрый способ сделать это в одном SQL-операторе?
Что я уже пробовал:
select * from [mytable] where ((([mytable].version)=(select max(x.version) from [mytable] as x where x.referencecode = [mytable].referencecode))) order by referencecode;
CHill60
Это работает лучше?
select A.* from [myTable] A INNER JOIN (select referencecode, max([version]) as [version] from [myTable] group by referencecode) B ON B.referencecode = A.referencecode AND A.[version]=B.[version] order by A.referencecode
ICTIS-THL
Если вы хотите представить отредактированный код в качестве решения, я с радостью его приму. :-)
ICTIS-THL
Нет... "Круговая референция, вызванная псевдонимом "версия" в списке выбора определения запроса"
ICTIS-THL
Но я отредактировал его, чтобы:
выберите A.* из [myTable] A
Внутреннее соединение (select referencecode, max(myTable.[версия]) как [версия] из группы [myTable] по ссылочному коду) B
На B. referencecode = A. referencecode и A.[version]=B.[version]
заказ по A. referencecode
И это кажется невероятно быстрым...
CHill60
Да-извините, что пропустил этот псевдоним таблицы: facepalm: я тестировал его в SQL, а не в Access, и первый менее привередлив в таких вещах.
Соединения всегда выполняются быстрее, чем прямые линейные подзапросы.
Рад был помочь.