Bom dia galera,
Eu tenho probleminha…
Estou fazendo uma aplicação que tem uma consulta das salas que estão agendadas… Só que esta consulta está demorando muito… Alguém sabe melhorar ? Já criei algumas INDEX para melhorar a consulta, segue abaixo o meu código.
Esse código abaixo é minha JSP, existem mais de 10 desses ai na minha JSP… ai demora pra carregar(normal, pois são inumeras consultas…) !!
<tr height="30">
<%
if (s.getSituacao() == 1
&& sd.findByReserva(s.getCodigo(), data, "09:00:00") == 0) {
%>
<%
if(ad.agendarHorario(data + " 09:00:00", ad.dataAtual()) == 1){
%>
<td align="center" style="background-color:#EAEAEA;">
<input type="radio" name="idsala" value="<%=s.getCodigo() %> 0900 ${data} 09:00:00" title="09:00"/>
</td>
<%
}else {
%>
<td align="center" style="background-color:#EAEAEA;"><img src="images/icon/apagar.png" alt="Horário Restrito" border="0" title="Horário Restrito" width="16" height="16"/></td>
<%
}
} else {
%>
<td align="center" style="background-color:#EAEAEA"><a href="#"
onmouseover="Tip('Horário:<%=ad.findByDados(
sd.findByReserva(s.getCodigo(), data,
"09:00:00")).getDataHoraInicial()%> as <br/> Solicitante:<%=fd.findByMat(
ad.findByDados(
sd.findByReserva(s.getCodigo(),
data, "09:00:00"))
.getAgendadoPor()).getNome()%> <br/> Agendado Por:<%=fd.findByMat(
ad.findByDados(
sd.findByReserva(s.getCodigo(),
data, "09:00:00"))
.getAgendadoPor()).getNome()%> ')"
onmouseout="UnTip()"><img src="images/icon/reserved.png" alt="Reservado" border="0" width="16" height="16"/></a></td>
<%
}
Minhas Index Criadas:
CREATE INDEX index_findallandar2 on sala(andar);
CREATE INDEX index_agendamento on agendamento(codSala,dataHoraInicial);
CREATE INDEX index_findbyreserva on agendamento(Codigo,codSala, dataHoraInicial);
CREATE INDEX index_findbydados on agendamento(Codigo);
CREATE INDEX index_findbymat on funcionario(matricula);
Aqui é o a Classe que gerencia as consultas…
Um dos findby… aí:
public List<Sala> findByAllAndar2(String andar, String dataHora)
throws Exception {
open();
List<Sala> listasala = new ArrayList<Sala>();
stmt = con
.prepareStatement("select * from sala s USE INDEX(index_findallandar2) where andar = ?");
stmt.setString(1, andar);
rs = stmt.executeQuery();
while (rs.next()) {
Sala s = new Sala(rs.getInt("s.Codigo"), rs.getString("s.Nome"),
rs.getInt("s.MaxPessoas"), rs.getString("s.Andar"),
rs.getInt("s.Situacao"), new ArrayList<Agendamento>());
listasala.add(s);
}
rs.close();
for (Sala s : listasala) {
stmt = con
.prepareStatement("select * from agendamento USE INDEX (index_agendamento) where CodSala = ? and DataHoraInicial BETWEEN ? '09:00:00' and ? '18:00:00'");
stmt.setInt(1, s.getCodigo());
stmt.setString(2, dataHora);
stmt.setString(3, dataHora);
rs = stmt.executeQuery();
while (rs.next()) {
Agendamento a = new Agendamento(rs.getInt("Codigo"),
rs.getString("DataHoraInicial"),
rs.getString("DataAgendamento"), rs.getInt("Situacao"),
rs.getString("dataDesmarcacao"), rs.getString("Tema"));
s.getListaagendamento().add(a);
}
}
close();
return listasala;
}
Agradeço DESDE JÁ !!!
