1.联合索引的使用情况
当两个字段单独设置索引的时候,经过索引之后仍然都有很多数据的时候。比如 当你值设置stu_id或者tea_id都会剩余很多记录的时候,就将两者设置组合索引但是响应的维护成本也就大些。
在mysql分页语句的时候,将where 后的字段 和 limit的字段设置成索引。
创建复合索引的时候,要注意顺序,如index(id,name,age) ,这对于 id查询,id name很有效果,但是对于name age 查询效果不大。
2.分页语句
#分页语句
SELECT * from student LIMIT 5,4;
#优化语句
alter table student add index index_yh(sno,ssex);
SELECT * from student where ssex ="男" ORDER BY sno LIMIT 5,4;
#分页语句 oracle
SELECT * from
(
SELECT a.* ,rownum rn from (SELECT *from student) a
WHERE rownum <40
)b
WHERE b.rn>=20 ;
3.mysql 的复制原理以及主从表
主从表,即保证一个主表和从表的数据是一致的。在主表更新的时候,从表也能保持与主表的一致。
具体实现是: 根据mysql的复制原理,当主表开启bin功能之后,对主库的更新操作会写入二进制日志文件中,从表会隔一段时间进行检测是否有更新。
如果有更新则,从表开启io线程,请求这些日志,而主表开启Dump线程将从 从表最后一次更新的日志地方开始,将这之后的日志发送给从表,从表的io线程读取这些日志并且即放在中继日志中; 然后从表开启sql线程 ,将中继日志中的日志进行执行操作,更新从数据库。
注意的是: 一共是三个线程,主表要开启binlog 二进制日志功能,从表要得到主表授远程连接的权限。异步操作。
mysql支持的复制: 默认采用的语句复制,当无法进行语句复制的时候,进行行复制。
作用: 读写分离,减轻主服务器的压力,负载均衡,数据备份, 维护数据安全性。
配置过程中注意事项:
sync_binlog =n 表示的是,每当n个事物完成后就强制将二进制日志同步到磁盘中去。这样即使崩溃了,也不会丢失日志中内容。但是消耗比较大,=0时效率高,但是存在风险。
4.acid
原子性 一致性 隔离性 永久性
隔离性: 当多个事物并发操作一个数据的时候,当前事物不能受其他事物的操作的影响。
并发中事物容易出现的问题
脏读, 当前事物读到的是另一个事物修改但是还未提交的数据。此时另一个事物回滚操作,就容易产生脏读。
不可重读, 当前线程A事物多次读取数据之后,返回的结果是不一样的。原因在A事物读取但是还未提交的时候,B事物进行update操作。
幻读 当前事物读取的数据本不该有的,只是在当前事物读取的过程中,其他事物有插入的新数据。比如事物a进行修改操作,将所有id =1,此时B事物进行插入操作。事物A就会发现还有一条数据没有更新,其实这是事物B新插入的。与不可重复读, 不同的是他是对于插入操作,而不可重读读是更新操作。
四中隔离级别
读未提交 : 容易产生脏读问题
读已提交: A事物只能读取已经提交的事物。 读加读锁,写加写锁,避免了脏读 ,有可能产生不可重复读,幻读问题。
可重读 : A事物在读取数据还未提交的时候,B事物不可以对该数据进行插入。在读事物的时候,加锁,其他事物不可进行操作。容易产生幻读问题,因为两次读操作是两个事物。(mysql 默认)
序列化:读事物的时候,加表级锁,直到读事物完成,其他事物不可进行操作。避免幻读。
5 innodb
innodb 支持外键 事物 ,行级锁。通过索引进行加上行锁。默认每个sql语句就是一个事物。
myisam 虽然不支持事物 是表级锁,但是查询速度快性能高。,全文索引 。select count(id) from a
6存储过程
存储过程是编写一段sql语句,可以有参数,也有返回值。
在调用的时候直接调用,不必在继续重新编写传输sql语句,而是直接进行调用就可以了。