MySQl优化学习笔记(一) 硬件级别优化和数据库级别优化

MySQl优化SQL主要从两个方向进行:硬件级别数据库级别

硬件级别包括磁盘寻找(寻址)磁盘读写CPU存储带宽(CPU缓存)四方面。

    寻址----其优化方式一般为换固态硬盘或换内存;

    磁盘读写 ----数据库的本质是一组文件集 程序运行在内存中    因为要与硬盘进行IO操作 所以速率变慢   编程时 想尽办法减少硬盘的IO。

数据库级别最高效的因素是数据库的基本设计。

数据库级别优化包括表结构优化索引存储引擎行格式锁策略缓存区大小设置

    表结构----表结构设计是否正确;

    索引----正确的设置索引达到查询高效,索引是数据库中成本最低效果最好的一种提升查询的手段;

    存储引擎----对于不同情况 选择不同存储引擎

    行格式----每张表是否具有适当的行格式、每个列类型是否合适、 约束是否都加了。 比如说性别可设置为布尔类型,用0、1存储,用的空间少。

    锁策略----应用程序使用适当的锁策略(也叫排队机制)  在高并发项目中用到的比较多。 

    未使用锁策略可能引发的问题:

        脏读(事务A读取到了事务B未提交的数据,事务A读取到的数据叫做脏数据,读取数据的过程叫做脏读);

        幻读(事务A把整个表数据查询出来了 ,事务B同时向表中插入一条 ,A查询出的数据可能不包含B新插入的数据,读取出来之后发现和现在          的行数不一致);

        不可重复读(针对于表中一行数据或一行中某列数据  当事务A在修改一行数据时没有提交,事务B读取到了这行数据  事务B读取的数据就是        旧数据和以后的真实数据不一致,为了防止事务B读取到未操作完成的数据的过程叫做不可重复读  ,主要针对修改的情况)。这三个针对于        事务未提交,高并发情况。这时候就要用到锁策略也叫排队机制。

        要想两个并发事务不出现幻读。锁上之后只能进行排队,可以锁整个表(表级锁) 也可以锁一行(行级锁)或者列级锁。

        幻读可以用表级锁,不可重复读可以用行级锁。

    缓存区设置----确认所有缓存区使用的大小是否都正确。缓存要保持一个度,要把数据能缓存进去。不能过大寻址慢,也不能过小存不下。

你可能感兴趣的:(MySQl优化学习笔记(一) 硬件级别优化和数据库级别优化)