Доступ к сквозному запросу для большой таблицы SQL - PullRequest
0 голосов
/ 13 января 2011

У меня есть большая таблица в базе данных MySQL (6 миллионов записей). Если я свяжу таблицу, я смогу ее открыть просто - кажется, что доступ запрашивает записи по мере необходимости. Однако, если я использую транзитный запрос, мне кажется, что доступ запрашивает всю таблицу перед ее открытием. Это достаточно медленно для моих обычных таблиц (200 000) записей, но большие невозможны. Я хочу использовать passthrough, чтобы иметь возможность использовать SQL-операторы, но мне нужно сделать это быстрее. Есть ли способ сделать это? Спасибо!

EDIT: Вот запрос; Вы не можете стать намного проще, чем это. SELECT * FROM Traffic12

1 Ответ

3 голосов
/ 13 января 2011

Ваш запрос запрашивает ВСЮ таблицу. Access делает именно то, что вы говорите. Единственный раз для использования сквозного запроса - это когда вы хотите, чтобы предложение WHERE (фильтрация) выполнялась на сервере, или объединения выполнялись на сервере, или когда вы используете преимущества серверной функциональности (например, UDF) или когда вы хотите добавить «подсказку», понятную фоновому серверу.

Очевидное преимущество в производительности, которое вы замечаете, когда не используете p-t-запрос, возникает из-за того, что Access извлекает только определенное количество строк за раз; но вы игнорируете эту оптимизацию из алгоритма подкачки, когда используете pass-thru.

Когда фильтрация выполняется на стороне сервера, сквозной запрос может быть намного более экономным с пропускной способностью, чем не-p-t, и, следовательно, может привести к значительному увеличению производительности по сравнению с непроходным. Или иногда серверная часть представляет собой огромную 4-х процессорную машину с огромным объемом оперативной памяти и может мгновенно обрабатывать большие индексы. Вы должны оценить ситуацию, чтобы увидеть, какой подход лучше с учетом всех факторов.

...