drop table table_name
将表全部删除delete from table_name where col_name=value
删除某一列的数据truncate table table_name
只删除表中所有的数据key
从左到右非递减排列,如果某个指针的左右相邻key分别时key i
与key i+1
且不为null
,则该指针指向节点的所有key均大于等于key i
且小于等于key i+1
用B+树而非B树考虑的是IO
对性能的影响。B树的每个节点都存储数据,而B+树只有叶子节点才存储数据,所以查找相同数据量时,B树的高度更高,IO更频繁。数据库索引是存储在磁盘中的,当数据量大时,就不能把整个索引全部加载到内存中,只能逐一加载每一个磁盘页
索引列参与表达式计算
select 'name' from 'stu' where 'age' + 10 = 30;
函数的运算
select 'name' from 'stu' where left('date', 4) < 1990;
%词语%
的模糊查询
select * from 'manong' where 'name' like '码农%'; --正常使用索引
select * from 'manong' where 'name' like '%码农%'; --索引失效
字符串与数字的比较
create table 'a'('a' char(10));
explain select * from 'a' where 'a' = "1"; --正常使用索引
explain select * from 'a' where 'a' = 1; --索引失效
查询条件中有or
时,即使其中条件带有索引,索引也会失效
select * from dept where name = 'a' or loc = 'b' or deptno = 42;
正则表达式不使用索引
当MySQL内部优化器认为全表扫表快于使用索引时,索引也会失效
show processlist
查看当前所有连接信息explain
命令查询sql语句执行计划master
中的binlog dump
线程将binlog event
传到slave
中slave
中的IO线程
接收传递的binlog
并将其写入到relay log
中slave
上的sql线程
读取并执行relay log
中的内容redo log
进行重做,从而达到事务的持久性bin log
进行重播,实现主从同步,还可以用于数据库基于时间点的还原MySQl读写分离的实现主要基于主从复制,通过路由的方式使应用对数据库的写请求只在master
上实现,读请求只在slave
上实现,具体有四种实现方案:
MySQL Proxy
代理 在应用与数据库之间增加代理层,代理层接收应用对数据库的请求,根据不同请求类型转发到不同的实例,在实现读写分离的同时还可以实现负载均衡,常见代理有mysql-proxy
、cobar
、mycat
、Atlas
等MySQL-Connector-Java
的JDBC
驱动方式 Java程序可以在连接MySQL的JDBC中配置主库与从库地址,JDBC会自动将读请求发送给从库,写请求发送给主库,此外JDBC驱动还可以实现多从库之间的负载均衡sharding-jdbc
的方式数据库连接是一种重要但有限且昂贵的资源,对数据库连接的管理可以有效地提高程序的伸缩性与健壮性。数据库连接池便是针对这一目标提出的
数据库连接池负责分配、管理并释放数据库连接,它允许应用程序重复使用一个现有的数据库连接并释放空闲时间超过最大时间的数据库连接来避免数据库连接泄漏
数据库连接池在初始化时会创建一定数量的数据库连接,数量由最小数据库连接库保证。数据库的最大连接数量限定了连接池中能占有的最大连接数,当应用程序向连接池请求的连接数超过最大连接数时,请求就会被加入等待队列中
hikariCP > druid > tomcat-jdbc > dbcp > c3p0