mssql 按关键字排序 MySQL调优
关于数据库优化,我们从以下5个维度进行。
一.优化表结构
表结构尽量遵循三范式的原则,在进行多表查询的时候,必要时可以采用反范式化进行优化
调优的目的?让吞吐量更大,响应速度更快。 关于数据库优化,我们从以下5个维度进行。 一.优化表结构 表结构尽量遵循三范式的原则,在进行多表查询的时候,必要时可以采用反范式化进行优化。 什么叫范式? 一共有6大范式,知道前5个就行。满足了高级范式,就一定满足低级范式。比如满足第三范式,就一定满足第1,2范式。 范式的优缺点? 反范式化? 数据库的设计原则?三少一多 数据库表建模的工具? 二.优化逻辑查询 关联查询优化:最好"被驱动表加索引" 优化器中join 的原理? 子查询优化: 子查询优化: 排序优化: 尽量使用索引完成order by排序。如果where 和order by 后面的列相同就用单索引,不同就用联合索引。对FileSort进行调优提高sort_buffer_size:不管哪种算法,提高这个内存值肯定加大效率。提高max_length_for_sort_data:这个参数就是一个界限,需要返回的列总长度大于这个值就使用双路,小于这个值就使用单路。 group by优化: 分页查询优化: 关于select *关于Limit 1: 三.优化物理查询(索引) 使用隐藏索引:之前索引要是删除后,发现效果不好或者出错,只能重新添加索引。一删一加浪费性能,现在就可以先隐藏索引mssql 按关键字排序,让索引不起作用。发现效果不错,再删除索引。 四.使用缓存 对于热点数据可以使用redis或者Memcached作为缓存,减少数据库的压力 五.库级优化 从以下3个方面进行调优。 1.优化MySQL服务器:在my.cnf或者my.ini文件的[mysqld]组中配置。 sort_buffer_size:表示每一个需要进行排序的线程分配的缓存区的大小。提高这个参数的值可以提高order by和group by的速度。对于4GB左右的服务器建议设置为6-8M。如果有100个连接,实际分配的总共排序缓存区的大小为6 * 100 = 600MB。join_buffer_size = 8M:表示联合查询操作时所能使用的缓存区大小,每一线程独享。read_buffer_size:表示每个线程连续扫描时为扫描的每一个表分配的缓冲区的大小。默认为64K,可设置为4M。innodb_flush_log_at_trx_commit:表示何时将缓存区的数据写入日志文件。0:表示每秒1次,将数据写入日志文件并将日志文件写入磁盘。1:表示每次提交事务,将数据写入日志文件并将日志文件写入磁盘。2:表示每次提交事务,将数据写入日志文件,每隔1s将日志文件写入磁盘。innodb_log_buffer_size:事务日志所使用的缓存区,log buffer的值。max_connections:表示允许连接到MySQL数据库的最大数量。back_log:用于控制MySQL监听TCP端口时设置的挤压请求栈大小,比如:max_connections为500,其他来的请求就可以放入这个栈中。5.0之前为50,现在一般为50+(max_connections / 5)。thread_cache_size:线程缓冲池的大小。wait_timeout:一个请求的最大连接时间,4GB的服务器一般设置为5-10。interactive_timeout:表示服务器在关闭连接前等待行动的秒数。 2.优化数据库结构: 使用分析表,检查表,优化表的语句创建全局通用表空间:create tablespace...,相对于独享表空间,可以节约元数据方面的内存。 3.大表优化: (编辑:成都站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |