MySQL优化(二)

it2024-12-27  13

1、建立基础索引:在where,order,join字段上建立索引优化,组合索引:基于业务逻辑前缀索引使用上与普通索引一致!

2、索引的存储结构:Btree索引,hash索引,聚簇索引Btree不是二叉树在MySQL中,仅仅只有InnoDB的主键索引是聚簇结构,其他的都是典型的BTree结构Hash索引就是key-value,就是PHP中的关联数组,索引被载入到内存时

3、queryCache,当数据表结构改动,缓存失效,动态数据不能被缓存show variables like 'query_cache_type'show variables like 'query_cache_size'set global query_cache_size=102760448;select sql_cache * from student where user like '%fyw'

4、分区,partition一个表的数据和索引存储在不同文件中//利用id字段,使用hash算法,将数据分布到10个分区内partition by hash(id) partitions 10

5、算法

(1)hash算法:(均匀分配)分区算法,在业务逻辑层面,表示均匀分配。(2)key算法:(均匀分配)partition by key(subject) partitions 10分区必须是主键的一部分,分区字段一定是强检索字段。(3)range算法:(条件分配)partition by range(pubtime){ partition p201710 values less than (1509465599), partition p201711 values less than (1512057599) } 条件必须是< less than运算符(4)list算法:(条件分配)也是一种条件分区,列表值分区partition by list(status){ partition pdone values in (1,2), partition pdod values in (3) } 业务逻辑有明显差异的时候选择条件分配,无明显差异则选择均匀分配 list,range可以删除或新增分区 alter table table-name add partition{ partition p201710 values less than (1509465599), partition p201711 values less than (1512057599) } hash,key可以修改分区数量 alter table table-name add partitions 4; alter table table-name coalesce partition 6; 只有检索字段是分区字段的时候,分区效率才会比较明显

6、分区的原因:数据库减压分区的算法局限(重要原因)

分区和分表都是属于水平化划分垂直分割:每个表的记录数量是一致的,但字段不一致

7、读写分离,负载均衡需要用到的技术,MySQL复制技术,负载均衡中间件读写分离:有一些MySQL服务器提供读操作,select另一些MySQL服务器提供写操作,insert,update,delete母的,分散压力,读服务器不会被阻塞所有PHP的框架都支持读写分离的配置写为主服务器,其余为读服务器

6、开启索引和约束,一次性创建索引alter table table-name disabled keysalter table table-name enable keys

7、MySQL主要采用一写多读架构,读操作大大多于写操作,还有就是写操作同步问题一写多读中,读服务器就需要负载均衡工作典型负载算法:轮询:轮着来加权轮询:依据能力,轮着来负载分配:依据空闲状态

8、横向扩展Mysql服务器;读写分离、主从复制、负载均衡(高性能)9、高可用:需要保证24小时不停机 在服务器架构时,所有单点服务器都需要配置冗余服务器,心跳检测

10、大页码,limit offset尽量保证不用出现大的offset,在使用limit时。11、select * 少用单表查询代替多表查询原因是:多表查询的执行,join,子查询,也是一个表的去执行,执行完再去合并结果。计算分布,单表查询,计算压力在应用程序端,多表查询,计算压力在数据库上。多表查询,会增加表锁定时间,降低程序并发性能。单表查询,增加了程序复杂度。使用ORM模型,模型已经做了大量的工作完成单表处理。12、count(1)和count(*)类似,统计记录数量

13、mysqlslap压力测试工具CMD上直接运行:mysqlslap并发测试:mysqlslap --auto-generate-sql --concurrency=250 --iterations=10 --engine=innodb -uroot -phellokang

14、全文索引:关键字不是字段本身,而是从字段中提取的关键词,作为关键字PHP典型的全文索引工具:Coreseek ,XunSearch,Solr都是典型的全文索引工具

转载于:https://www.cnblogs.com/Min-Na/p/11095456.html

最新回复(0)