数据库优化12点:
在进行表格查询时 , where子句中的条件执行顺序是从左至右 , 清除数据量较大的条件应该放在左边.(特别注意: 笛卡尔积消除条件必须放在最左边)
在进行表格查询时 , 列名列表应避免使用号 ! 数据库在执行查询操作时, 会先将号展开, 转换为所有的列名, 再进行查询.
在进行表格查询时 , 能使用where条件筛选的数据, 应尽量避免使用having子句来筛选. 因为where条件执行在having之前 , 在早期筛选掉大量数据, 可以让程序执行的更顺畅.
在进行多表查询时 , 查询的表顺序是从右至左的. 应把表中数据量最少的表放在查询的最右边.
在进行多表查询时 , 应尽可能的给所有的表添加别名, 能明确的区分有冲突的列.
在使用事务时 , 应尽量多的commit , 尽量早的commit ! 原因是: 事务在未提交时, 数据库会耗费大量的内存 , 来缓存未提交的SQL结果 !
尽可能多的使用函数 来提高SQL执行的效率.
SQL语句编写时, 除字符串以外 , 应使用大写字母 ! 因为SQL语句执行时, 会先将小写字母 转换为 大写字母, 再执行.
应尽可能少的访问数据库 (多次数据访问的结果可能相同, 如果缓存起来 ,可以提高程序的执行效率)
在索引列上 , 尽可能避免使用not来判断. not关键字如果判断了索引列 , 会导致此次查询索引失效 , 转而使用全表扫描的方式查询.
在索引列上, 不能使用算数运算 , 算数运算也会导致索引列使用, 使用全表扫描的方式进行查询.
在查询数据时, 如果需要使用>或<的条件, 应替换为>= 或 <= !
原因是>和<符号 , 查询时, 是按照>= 和 <= 进行查询, 然后在撇去=的结果
连接池
|
示例代码:
// DBCPUtil工具类 *
public class DBCPUtil {
private static DataSource dataSource;
static {
//在类加载时, 读取配置文件, 配置连接池
//1. 创建Properites对象
Properties ppt = new Properties();
//2. 读取配置文件,
InputStream is = DBCPUtil.class.getClassLoader().getResourceAsStream("dbcp.properties");
//3. 将配置文件 加载到Properties对象中
try {
ppt.load(is);
//4. 通过连接池工厂类, 创建连接池
dataSource = BasicDataSourceFactory.createDataSource(ppt);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 用于从连接池中 获取一个连接对象
* @return 连接对象 , 如果获取失败返回null
*/
public static Connection getConnection() {
try {
return dataSource.getConnection();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
/**
* 用于释放资源
* @param conn 连接对象
* @param state 执行环境
* @param result 结果集
*/
public static void close(Connection conn , Statement state ,ResultSet result) {
if(result!=null) {
try {
result.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(state!=null) {
try {
state.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null) {
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}