并发控制:读写锁,读锁是共享锁,写锁是排他锁
行级锁:最大程度的支持并发处理,最大的锁开销
事务:原子性、一致性、隔离性、持久性
索引:B_Tree索引:适合查找范围数据key(last_name,first_name),适用于全键值、键值范围或键前缀查找
必须从索引最左侧列开始查找、不能跳过索引中的列、查询中有某个范围查询,其右侧所有列都无法使用索引优化查找
哈希索引,只有memory引擎显式支持哈希索引key using HASH(fname),
全文索引:适用于match against操作
索引的优点:1:减少服务器需要扫描的数据量‘2:帮助服务器避免排序和临时表3:将随机I/O变为顺序I/O
索引高性能的策略:
1:独立的列,将索引列单独放在比较符号的一侧
2:前缀索引和索引选择性,找到索引长度的最合适长度看一下之后的标记语句
3:多列索引,再多个列上建立单独索引大部分情况不能优化
4:选择合适的索引列顺序(选择性高的列放在前面)
5:聚簇索引,一种数据存储方式
6:覆盖索引
7:尽量避免范围条件
8:优化排序 对于那些选择性非常低的列,可以增加特殊的索引做排序:例如(sex,rating) 来做select <sols> from profiles where sex ='m' order by rating limit 10;
减少冗余索引,类似(既有(A,B)也有(A),但是(B,A)和(B)则不是冗余)
在一些经常使用的到的搜索列中可以加上查询条件,就好比sex这个列几乎所有的查询都会用到这个列,就算不用也可以在查询条件中增减sex in ('m','f')的这个搜索条件
尽可能将范围查询放在最后面(前面的条件会过滤掉一部分数据)
查询的生命周期:从客户端到服务器,然后再服务器上执行解析,生成执行计划,执行,并返回结果给客户端;执行过程中包括了大量为了检索数据到存储引擎的调用以及调= 调 用后的数据处理(包括排序,分组)
数据库优化数据访问:一:是否向数据库请求了不需要的数据(取出*的写法,需要什么数据返回什么数据)二:是否在扫描额外的记录(查询开销的三个指标:响应时间,扫 描的行数,返回的行数)
一个复杂查询还是多个简单查询、分解关联查询(让缓存的效率更高、将查询分解后执行单个查询可以减少锁竞争、在应用层做关联容易对数据库进行拆分)
嵌套查询的情况:试讲外层表压缩到子查询中
安抚