我正在回顾我前一段时间构建和发布的应用程序。当时优化的时间不多,但我现在有一些时间来优化它。
我有一个 java DAL 类,它从数据库中加载一个包含项目的对象,如下所示:
sql = "SELECT COUNT(*) FROM projects";
count = execute(sql) // this returns the count
sql = "SELECT p.*, m.name AS clientName"
...
sql = sql + " FROM projects p"
sql = sql + " LEFT JOIN clients m ON p.clientID = m.id";
Project[] p = execute(sql, count); //this returns Project array
我遇到的问题是计数脚本需要超过 4 秒才能运行,而选择脚本需要大约 2 秒。虽然这是异步传递到表现层的,但是6秒的等待时间还是很长的(projects表只有300条左右的记录)。
我在想我可以通过添加存储过程并可能在脚本中添加额外的过滤器来改进这一点,例如“where active=1”。但我想知道是否有人可以提出更好的整体解决方案?
谢谢
编辑:我一直在用 System.nanoTime() 做一些进一步的测试,我发现计数脚本的 4 秒(3.8 秒)中最大的一块发生在执行函数中的一行中:
Connection c = getCon();
getCon 函数执行此操作:
if (con == null) {
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
con = DriverManager.getConnection(db_connect_string,db_userid,db_password);
}
...
所以我现在有一个新问题——为什么需要 3.8 秒才能获得 db 连接?