数据库:mysql——表结构是。
------------------------------------------
phone_no (This is PK) | month | year
------------------------------------------
varchar(15) | INT (2) | INT(4)
这有数百万条记录,现在当用户在一个月内第一次访问该网站时,我必须在数据库中输入一个条目,否则什么都不会发生,这是为了报告目的。我的 Java 代码是:
The VO ---->
public class UesrAccessInfo {
private String phone_no;
private int year;
private int month;
.. getters and setters ...
}
现在访问表的java代码是:
/* 以下方法在 java 代码中实现,没有 db 访问 */
String phone_no = getPhoneNumber();
int currentMonth = getCurMonth();
int currentYear = getCurYear(;
if (phone_no == null ) {
request.setAttribute("firstAccessInCurrentMonth", false);
}
else{
UesrAccessInfo oUesrAccessInfo = new UesrAccessInfo();
oUesrAccessInfo.setPhone_no(phone_no);
UserAcessHistoryDBUtil.getUesrAccessInfo(oUesrAccessInfo);
//////////// Code for getUesrAccessInfo() in UserAcessHistoryDBUtil class /////////////
String sql = "select month , year from user_access_history where phone_no= ?";
String[][] rs = new MyDBAccessor().getPreparedTable(sql,new String[] { oUesrAccessInfo.getMsisdn() });
if (rs != null && rs.length > 0) {
for (String[] item : rs) {
oUesrAccessInfo.setMonth(Integer.parseInt(item[0]));
oUesrAccessInfo.setMonth(Integer.parseInt(item[1]));
}
}else{
oUesrAccessInfo.setMonth(0);
}
}
/////////////////////////////////////////////////////////////////
/**
* User is already present in database
*/
if(oUesrAccessInfo.getMonth() != 0){
/**
* User has already accessed the site in current month
*/
if(oUesrAccessInfo.getYear() == currentYear && oUesrAccessInfo.getMonth() == currentMonth){
request.setAttribute("firstAccessInCurrentMonth", false);
}
else{
UserAcessHistoryDBUtil.updateUserAccessHistory(phone_no, ""+ currentMonth, "" + currentYear);
request.setAttribute("firstAccessInCurrentMonth", true);
}
}
/**
* User is not present in database
*/
else{
UserAcessHistoryDBUtil.createUserAccessHistory(phone_no,""+ currentMonth, "" + currentYear);
request.setAttribute("firstAccessInCurrentMonth", true);
}
}
所以,我在这里面临性能问题。我不能使用缓存,因为服务器中可能存在内存不足错误。
任何建议,以提高性能,我是 mysql 的新手。