数据库如何优化
- explain 联合索引 最左前缀原则
- Innodb 辅助索引 id name age
- 遵循索引设计的7大原则
- 不要写导致索引失效的sql语句
索引 --》 查找算法 有一个精确的数据让我们去查找 —》 退化全表查询
select id from user where age = 50;
(1)where 语句上写了函数
select id from t where substring(name,1,3)='abc' ,
(2)where 语句上写了算数运算
select id from t where num/2=100
(3)`where in not in `
(4)or ||
(5)like %abc; abc%
abc% abcd abce abcdef abcder
-
配置层修改:windows my.ini Linux my.cnf
(1)查询缓存
select id from user where name = ?
(2)索引缓存 数据缓存(Innodb)
MyISAM 不支持数据缓存
(3)线程缓存mysql C/S C语言 IO复用 select poll epoll
----》 selector NIO 线程池
线程:线程数量 = cpu的核数 * (1+io耗时/cpu耗时) -
代码层的优化
(1)连接池 提供对连接的统一化管理
c3p0 —> 自己实现一个连接池
存放连接的容器connection 第一个用户创建新的连接
第二个用户请求 maxPollSzie 10
minPollSzie = 5 ideltime 空闲的连接杀死掉
(2)preperdStatement 预编译的sql 执行手段
需要再第一执行 编译 查询计划进行缓存
预编译:sql执行计划
(1)只在第一次执行的时候需要编译 效率更高
(2)防止 sql 注入的异常
(3)代码书写和维护上更加便捷