2013-10-10 3 views
1

У меня есть сомнение, что внешние таблицы (Oracle) могут использоваться в моем приложении, фактически не создавая реальную таблицу в базе данных. То, что я намереваюсь сделать, это то, что у меня есть файл .txt (около 25 ГБ), и я хочу запустить SQL запросы непосредственно в моем файле .txt без создания и загрузки данных в фактической таблице базы данных. Итак, мой вопрос заключается в том, возможно ли это, и если да, то каковы недостатки и преимущества при этом. Любая помощь высоко ценится.Можно использовать внешние таблицы как обычную таблицу базы данных (Oracle)

ответ

3

Возможно, но основным недостатком внешних таблиц является то, что вы не можете создать какой-либо индекс для таких таблиц, поэтому выбор данных может быть довольно медленным. Прочитано this.

+0

довольно медленный - это действительно большое преуменьшение. Доступ к 25gb .txt ... madness – Najzero

+0

@Mikhail Спасибо за ваш вклад, согласно моему требованию, я не буду создавать индексы, а также содержимое таблицы нужно будет удалять и загружать новыми данными очень часто. Итак, я думал о сохранении времени загрузки данных, так ли это хороший подход к использованию внешней таблицы? И можете ли вы поделиться этим тем, что он отличается от доступа к обычной таблице базы данных с точки зрения синтаксиса кода. – user2002522

+0

@ user2002522 Therw не будет отличием в синтаксисе запроса, где бы вы ни запрашивали внешнюю таблицу или нет. Единственное отличие заключается в инструкции CREATE TABLE. Я думаю, вам нужно просто проверить два случая: время, необходимое для загрузки данных в обычную таблицу и запроса на нее, а также времени, которое потребуется для запроса внешней таблицы. И, учитывая время, которое вы получаете, решите, будет ли быстрее загружать данные или просто запрашивать их как есть. – Mikhail

2

Вы можете применить параллельный запрос, но, конечно, не можете создавать индексы или изменять данные или собирать полный набор статистических данных (вы можете собирать некоторые статистические данные с помощью DBMS_STATS.GATHER_TABLE_STATS, что может помочь Oracle определить лучшую стратегию объединения).

Если файл был логически разделен на несколько файлов, чтобы вы могли указать, что данные за январь были в определенном файле, то вы, безусловно, могли бы иметь несколько внешних таблиц и, возможно, что-то фантастическое для эмуляции секционированных представлений, но это было бы боль.

Действительно, вы должны загрузить данные. Если производительность этого является проблемой, используйте нагрузку nologging с прямым указателем, уже определенную в таблице. В случае сбоя носителя вы можете перезагрузить данные, поэтому ведение журнала является необязательным.

Смежные вопросы