我有一个基于MySQL开发的应用程序,它通过Hibernate连接。我使用DAO实用程序代码来查询数据库。现在我需要通过索引优化我的数据库查询。我的问题是,如何通过Hibernate DAO实用程序代码查询数据,并确保在执行查询时在MySQL数据库中使用索引。任何有关现有示例的提示或指示都表示赞赏!
更新:只是想让问题更容易理解。以下是我用于通过Hibernated DAO实用程序代码查询MySQL数据库的代码。我不是在这里直接使用HQL。有关最佳解决方案的建议吗?如果需要,我将重写数据库查询代码并直接使用HQL。
public static List<Measurements> getMeasurementsList(String physicalId, String startdate, String enddate) {
List<Measurements> listOfMeasurements = new ArrayList<Measurements>();
Timestamp queryStartDate = toTimestamp(startdate);
Timestamp queryEndDate = toTimestamp(enddate);
MeasurementsDAO measurementsDAO = new MeasurementsDAO();
PhysicalLocationDAO physicalLocationDAO = new PhysicalLocationDAO();
short id = Short.parseShort(physicalId);
List physicalLocationList = physicalLocationDAO.findByProperty("physicalId", id);
Iterator ite = physicalLocationList.iterator();
while(ite.hasNext()) {
PhysicalLocation physicalLocation = (PhysicalLocation)ite.next();
List measurementsList = measurementsDAO.findByProperty("physicalLocation", physicalLocation);
Iterator jte = measurementsList.iterator();
while(jte.hasNext()){
Measurements measurements = (Measurements)jte.next();
if(measurements.getMeasTstime().after(queryStartDate)
&& measurements.getMeasTstime().before(queryEndDate)) {
listOfMeasurements.add(measurements);
}
}
}
return listOfMeasurements;
}
答案 0 :(得分:1)
就像使用SQL一样,您不需要做任何特别的事情。只需像往常一样执行查询,如果可能,数据库将使用您创建的索引来优化它们。
例如,假设您有一个HQL查询,它会搜索具有给定名称的所有产品:
select p from Product where p.name = :name
此查询将由Hibernate转换为SQL:
select p.id, p.name, p.price, p.code from product p where p.name = ?
如果您在product.name
上没有设置任何索引,则数据库必须扫描整个产品表以查找具有给定名称的索引。
如果您在product.name
上设置了索引,则数据库将确定在给定查询的情况下使用此索引很有用,因此可以通过索引知道哪些行具有给定名称。因此,它只能读取行的一小部分以返回查询数据。
这对你来说都是透明的。您只需要知道哪些查询的速度很慢且频繁,足以证明创建索引以加快它们的速度。