数据库的一些总结

并发控制:读写锁,读锁是共享锁,写锁是排他锁

         行级锁:最大程度的支持并发处理,最大的锁开销

事务:原子性、一致性、隔离性、持久性


索引: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')的这个搜索条件

尽可能将范围查询放在最后面(前面的条件会过滤掉一部分数据)


 查询的生命周期:从客户端到服务器,然后再服务器上执行解析,生成执行计划,执行,并返回结果给客户端;执行过程中包括了大量为了检索数据到存储引擎的调用以及调=                                调 用后的数据处理(包括排序,分组)

数据库优化数据访问:一:是否向数据库请求了不需要的数据(取出*的写法,需要什么数据返回什么数据)二:是否在扫描额外的记录(查询开销的三个指标:响应时间,扫                                            描的行数,返回的行数)

                                   一个复杂查询还是多个简单查询、分解关联查询(让缓存的效率更高、将查询分解后执行单个查询可以减少锁竞争、在应用层做关联容易对数据库进行拆分)


嵌套查询的情况:试讲外层表压缩到子查询中


 安抚



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章