在服务器端代码一般为了更好的性能,我们不应该使用"select*from table"而应该根据需要查询必要的列(选择名称,从员工添加).这是我在数据库性能指南中读到的文章.
现在我有hibernate的问题,我读到最好在hibernate中使用session.load(id)来根据主键检索记录.这将检索与给定"id"(表中的记录)的实体关联的所有列.
现在它与一般数据库性能指标并不矛盾.哪个是hibernate本机sql查询或hibernate查询语言更好的性能?
让我知道您的宝贵意见,因为我试图调整我的代码以获得更好的性能.
Joh*_*nna 35
你弄乱了一些零件.您也可以仅使用HQL选择某些列,例如,您可以select column from table在HQL中使用.
本机SQL不一定比HQL更快.HQL最终也被翻译成SQL(您可以在运行应用程序时查看生成的语句,并将show_sql属性设置为true).在某些情况下,可能会发生Hibernate不生成最有效的语句,因此本机SQL可以更快 - 但使用本机SQL,您的应用程序会丢失从一个数据库到另一个数据库的可移植性,因此通常更好地调整hibernate映射和HQL语句生成更有效的SQL语句.另一方面,本机SQL缺少Hibernate缓存 - 因此在某些情况下,本机SQL可能比HQL慢.
当您使用session.load(class, id)并且该行尚未在缓存中时,加载也会生成一个select * from classTable,因此速度与HQL相同from.(但是当对象已经在缓存中时,则可能load更快.)
我不同意您的性能指南:在大多数情况下,如果您加载所有列或仅加载所需列,则无关紧要.在数据库访问中,搜索行时会丢失时间,而不是在将数据传输到应用程序时.当您只读取必要的列时,它具有以下缺点:
(想想,如果您的应用程序中有您不需要的列,或者在应用程序完成后将添加的列,那么您只是不将它们放入您的类和映射中,并且它们永远不会被加载,并且您的应用程序设计仍然很好.Hibernate不生成select * from table语句,它总是生成select col1, col2, ... from table.)
有一个例外:如果加载大量数据 - 数千行 - 那么只加载必要的列可以明显加快.
| 归档时间: |
|
| 查看次数: |
21623 次 |
| 最近记录: |