Быстрее выбрать оператор, используя спящий режим

В нескольких статьях упоминается, что мы не должны извлекать все столбцы таблицы. Мы должны избегать Select * from table1 и писать Select name, age, phone from table1,

Q1) Значит ли это, что при написании HQL мы не должны писать from Table1?

Q2) Я слышал, что некоторые компании используют хранимые процедуры в своем коде Java для получения данных, вместо написания оператора выбора. Эта техника действительно эффективна?

Q3) Я слышал, что для одного приложения. Иногда многие базы данных используются вместо одной базы данных. Почему это так? Эта техника хороша?

2 ответа

Решение

Ответ 1: Hibernate не использует select *: Это переводит select from table в select col1, col2, col3 ... from table1, Кроме того, если вы не определите столбец в спящем режиме, он не будет выделен.

Ответ 2: Я рекомендую избегать использования хранимых процедур. На самом деле они редко бывают быстрее запросов, особенно для простого извлечения данных. Есть много веских причин не использовать их, в том числе 1) не переносимые, 2) невозможные для отладки, 3) не могут выполнить модульное тестирование, список можно продолжить

Ответ 3: Я бы использовал одну базу данных, а не разделял ваши данные. Управлять им слишком сложно, и вы добавляете больше компонентов в свою систему без какой-либо выгоды (также большинство систем используют одну базу данных, так что это не может быть так уж плохо). Распределенные базы данных, однако, хорошая идея.

Идея использования ORM заключается в работе с Java-объектом. Итак, используя from Table все в порядке, это дает вам готов к работе с объектами, но...

Может случиться так, что у вас есть большие поля Blobs или Clobs, а затем пометьте их как лениво загруженные, чтобы вам не пришлось хранить их в кэше сеанса, что стоит памяти.

Может также случиться, что вам нужно выбрать 100 000 строк, тогда нет смысла использовать ORM-отображение. Вы должны вернуться к собственным запросам SQL (которые также хорошо управляются Hibernate).

Для небольших наборов результатов (вы можете ограничить их в предложении where) можно использовать HQL, если у вас нет больших BLOB и CLOB. Поскольку результирующий набор невелик, не так важно, если вы выбираете нужные поля или нет (очевидно, вы можете сделать это, но это может быть неожиданным для другого члена команды, если некоторые данные отсутствуют).

Для больших наборов данных HQL не имеет смысла.

Другие вопросы по тегам