SQL优化
- 查找SQL尽量不要使用 select * , 而是具体字段
- 避免在 where 字句中使用 or 来连接条件
- 使用 varchar 代替 char
- 尽量使用数值替代字符串类型
- 查询尽量避免返回大量数据
- 使用 explain 分析你 SQL 的执行计划
- 是否使用了索引机器扫描类型
- 创建 name 字段的索引
- 优化 like 语句
- 字符串怪现象
- 索引不宜太多,一般 5 个以内
- 索引不太适合建在有大量重复数据的字段上
- where 限定查询的数据
- 避免在 where 中对字段进行表达式操作
- 避免在 where 字句中使用 != 或 <> 操作符
- 去重 distinct 过滤字段要少
- where 中使用默认值代替 null
- 批量插入性能提升
- 默认新增SQL有事务控制,导致每条都需要事务开启和事务提交;而批量处理是一次事务开启和提交。自然速度飞升
- 数据量小体现不出来
- 批量删除优化
- 一次性删除太多数据,可能造成锁表,会有lock wait timeout exceed的错误,所以建议分批操作
- 提高 group by 语句的效率
- 复合索引最左特性
- 复合索引也称为联合索引
- 当我们创建一个联合索引的时候,如(k1,k2,k3),相当于创建了(k1)、(k1,k2)和(k1,k2,k3)三个索引,这就是最左匹配原则
- 联合索引不满足最左原则,索引一般会失效,但是这个还跟Mysql优化器有关的
- 排序字段创建索引
- 删除冗余和重复的索引
- 不要有超过5给以上的表连接
- inner join、left join、right join,优先使用 inner join
- 如果inner join是等值连接,返回的行数比较少,所以性能相对会好一点
- 同理,使用了左连接,左边表数据结果尽量小,条件尽量放到左边处理,意味着返回的行数可能比较少。这是mysql优化原则,就是小表驱动大表,小的数据集驱动大的数据集,从而让性能更优
- in 子查询的优化
- 尽量使用union all 替代 union
- union和union all的区别是,union会自动去掉多个结果集合中的重复结果,而union all则将所有的结果全部显示出来,不管是不是重复
union:对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序
union在进行表链接后会筛选掉重复的记录,所以在表链接后会对所产生的结果集进行排序运算,删除重复的记录再返回结果。实际大部分应用中是不会产生重复的记录,最常见的是过程表与历史表UNION
JDBC
概述:
- 通过 java 程序连接数据库,是一套标准,本质上就是用jar包里的各种工具类。
开发步骤
- 在目录下创建 lib 文件夹
- 根据版本导入对应的 jar 包
- 将 lib 设置为library
数据库
连接数据库
Class.forName("com.mysql.cj.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/cgb2105";
String user = "root";
String passWord = "root";
Connection connection = DriverManager.getConnection(url,user,passWord);
查找数据
String sql = "select * from dept";
Statement statement = connection.createStatement();
ResultSet result = statement.executeQuery(sql);
while (result.next()){
int deptno = result.getInt("deptno");
String dname = result.getString("dname");
String loc = result.getString("loc");
System.out.println(deptno + "\t" + dname + "\t" + loc);
}
result.close();
statement.close();
connection.close();