2012-04-22 41 views
1

在几篇文章中提到我们不应该获取表的所有列。我们应该避免Select * from table1并编写Select name, age, phone from table1更快的select语句使用休眠

Q1)这是否意味着在编写HQL时,我们不应该写from Table1

Q2)我听说有些公司在其java代码中使用存储过程来获取数据,而不是写入select语句。这种技术真的有效吗?

Q3)我听说了一个单一的应用程序。有时使用许多数据库而不是单个数据库。为什么?这项技术是否很好?

回答

4

答案1:休眠不使用select *:它将select from table转换为select col1, col2, col3 ... from table1。此外,如果你没有定义一个列休眠,它不会选择它。

回答2:我的建议是避免使用存储过程。实际上它们很少比查询更快,特别是对于简单的数据检索。有很多很好的理由不使用它们,其中包括1)不便携式,2)不可调试,3)不能单元测试,列表如下

答案3:我会使用一个数据库而不是分割你的数据。这太难管理了,而且你为系统添加了更多的组件(没有增益)(大多数系统也使用一个数据库,所以它不会那么糟糕)。 分布式数据库然而是一个好主意。

1

使用ORM的想法是使用Java对象。所以使用from Table是好的,它可以让你准备好使用对象,但是...

它可能发生,你有大字段Blobs或Clobs,然后标记为惰性加载,所以你不必保持它们在会话缓存,这会花费内存。

它也可能发生,你需要选择100 000行,那么它使用ORM映射没有意义。你应该回到SQL本机查询(这也很好地由Hibernate管理)。

对于小的结果集(可以将它限制在where子句中),除非拥有大的BLOB和CLOB,否则可以使用HQL。由于结果集很小,因此如果您选择所需的字段或者不选(显然您可以这样做,但其他团队成员可能会意外,如果缺少某些数据)。

对于大型数据集HQL没有意义。