一、服务器硬件

CPU+内存选择

并发量+QPS+mysql版本+32/64位CPU

QPS:每秒同时处理sql的数量

二、服务器操作系统

三、数据库存储引擎的选择-插件式存储

MyIsAM 不支持事务,表级锁

InnoDB 事务存储引擎,完美支持行级锁,事务ACID特性

四、数据库参数配置

查看mysql配置路径及相关配置

mysqld --verbose --help|grep -A 1 'Default options'

mysql --verbose --help|grep -A 1 'Default options'

参数作用域

全局参数

set global 参数名=参数值

set@@global.参数名:=参数值

会话参数

set[session]参数名=参数值

set@@session.参数名:=参数名字

内存相关的参数

确认可以使用的内存的上限

确认mysql连接使用的内存

确认操作系统保留多杀内存

sort_buffer_size

会话发送的语句需要进行排序时就会一次性分配对应的大小的缓存

join_buffer_size

应用程序经常会出现一些两表(或多表)Join的操作需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减少参与Join的“被驱动表”的读取次数以提高性能,需要使用到 Join Buffer 来协助完成 Join操作。当 Join Buffer 太小,MySQL 不会将该 Buffer 存入磁盘文件,而是先将Join Buffer中的结果集与需要 Join 的表进行 Join 操作,然后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会造成被驱动表需要被多次读取,成倍增加 IO 访问,降低效率。

read_buffer_size

是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。如果对表的顺序扫描请求非常频繁,并且你认为频繁扫描进行得太慢,可以通过增加该变量值以及内存缓冲区大小提高其性能。

read_rnd_buffer_size

是MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以避免磁盘搜索,提高查询速度,如果需要排序大量数据,可适当调高该值。但MySQL会为每个客户连接发放该缓冲空间,所以应尽量适当设置该值,以避免内存开销过大。

缓冲池分配内存

innodb_buffer_size:

InnoDB使用该参数指定大小的内存来缓冲数据和索引,这个是Innodb引擎中影响性能最大的参数。{总内存-(每个线程所需内存*连接数)-系统保留内存)}

key_buffer_size

myisam决定索引处理的速度,尤其是索引读的速度。默认值是16M,通过检查状态值Key_read_requests和Key_reads,可以知道key_buffer_size设置是否合理。比例key_reads / key_read_requests应该尽可能的低,至少是1:100,1:1000更好(上述状态值可以使用'key_read%'获得用来显示状态数据)。key_buffer_size只对MyISAM表起作用。即使你不使用MyISAM表,但是内部的临时磁盘表是MyISAM表,也要使用该值。设置改制大小可通过以下语句获取。

select sum(index_length) from information_schema.tables where engine='myisam';

innodb_log_file_size:

这个值设置redo log文件的大小。

innodb_log_files_in_group:

这个值设置redo log文件的个数

innodb_log_buffer_size

redo log缓存池的大小。

innodb_flush_log_at_trx_commit

这参数设置了mysql redo log刷新到日志文件的方式。该参数设置有以下三个值:

0:每隔一秒mysql将redo log buffer中的数据刷新到操作系统cache中,并刷新到磁盘中,但是事务提交操作并不会引起任何操作。这样会至少丢失1秒钟的数据。

1:在每次事务提交执行log写入cache,并将数据刷新到磁盘。(系统默认设置)

2:事务提交时会将数据刷新到操作系统的cache中,但是并不会引起数据刷新到磁盘中,这样在系统崩溃时候有可能造成1s的数据丢失。

innodb_flush_method

这个参数控制着innodb数据文件及redo log的打开、刷写模式。

fdatasync

调用fsync()去刷数据文件与redo log的buffer。(默认)

O_DSYNC

innodb会使用O_SYNC方式打开和刷写redo log,使用fsync()刷写数据文件。

O_DIRECT

innodb使用O_DIRECT打开数据文件,使用fsync()刷写数据文件跟redo log。

innodb_double_wirte

双写缓存 ,用来缓存保护数据避免写数据块时造成了数据块损坏。

五、表结构的设计和SQL语句

设计数据库的步骤

需求分析

全面了解产品设计的存储需求

存储需求

数据处理需求

数据的安全性和完整性

逻辑设计

设计数据的逻辑存储结构

数据实体之间的逻辑关系,解决数据沉余

数据维护异常

物理设计

根据所使用的数据库特点进行表结构设计

关系型数据库:oralce sqlserver mysql postgressql

非关系型数据库:mongo redis hadoop

维护优化

根据实际情况对索引,存储结构进行优化

数据库设计规范

所有表中的所有指端具有单一属性

单一属性的列是由基本的数据类型所构成

设计出来的表是简单的二维表

一个表中具有一个业务主键

六、慢查询- 数据表结构不合理

两表查询很慢mysql_影响mysql性能的方面相关推荐

  1. mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集

    求两个查询结果的差集,Mysql直接提供了关键字not in,但是not in的效率极其低下,出现例如求一个上千查询结果在上万查询结果的差集,那么使用not in来查询的查询速度极其缓慢,这是必须使用 ...

  2. mysql如何链表查询_mysql怎样两表查询?

    mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...

  3. mysql怎样两表查询_mysql怎样两表查询?

    mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...

  4. 结构化查询语句简称mysql_整理MySql常用查询语句

    MySql的性能优化 性能优化是通过某些有效的方法提高MySQL数据库的性能.性能优化的目的是为了是MySQL数据运行速度更快.占用的磁盘空间更小.性能优化包括很多方面,例如优化查询速度.优化更新速度 ...

  5. mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化

    1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用','  如: SELECT * FROM table1 CROSS JOI ...

  6. mysql两表之间字段匹配concat_实例学习MySQL多表之间字段的匹配

    多表之间字段进行匹配的sql语句: 复制代码 代码示例: $sql=$empire->query("select table.title,lianxi,table.dizhi,tabl ...

  7. java mysql 多表查询_Java编程基础32——MySQL多表联查

    SQL 会创建多表及多表的关系 1.多表之间的关系如何来维护 添加外键约束: foreign key alter table product add foreign key(cno) referenc ...

  8. 【SQL SERVE】查询总计金额以及两表查询

    表结构: order表: member表: 两表关联:order.MemberId==member.Id select * from (select MemberId,SUM(ActualPayCas ...

  9. MySQL-性能优化_影响MySQL性能的因素分析及解决方案

    文章目录 生猛干货 官方文档 影响性能的几个因素 CPU 内存 磁盘的配置和选择 传统的机械硬盘 RAID SSD 或者 PCIe卡 网络存储SAN (光纤传输)和 NAS (带宽传输) 网络 操作系 ...

最新文章

  1. URLEncoder和URLDecoder中特殊字符的处理方案 URL传值问题
  2. SQL 表之间的更新
  3. 从蚂蚁金服一窥人工智能在金融领域的机遇与挑战
  4. kali 2020 ssh自启动_自动化所于2020年“国科大杯”创新创业大赛获得多项奖项
  5. 每天一道LeetCode-----二叉树逐层遍历,每一层存在一个序列中,返回所有序列集合
  6. 查看某个github commit属于哪一个github pull request
  7. 在传统行业做数字化转型之团队篇
  8. linux c之fdopen(int fd, const char *type)使用总结
  9. 如何创建一个自记录的Makefile
  10. Java提高篇 —— String缓冲池
  11. adb remount overlayfs的说明
  12. 台式机也颤抖!ROG Strix S5AS性能强悍到底
  13. 【华为云技术分享】用人工智能技术推动西安民俗文化,斗鱼超管团队有一套
  14. OpenShift 4 - Knative教程 (1) 创建Serverless运行环境
  15. 可重组合与不相邻组合
  16. POJ 1635 树的最小表示法
  17. 想学制作外挂的新手看过来
  18. 部分移动卡 无人接听时呼叫转移失败 问题分析
  19. lasso回归python代码_LASSO回归代码实现 坚韧不拔|静水流深|读书|写作|博雅|数据分析|Python|商业|独立·独特·自立门户 kebook...
  20. 乘风领航、耀世创新——DEFI平台Lizard打造数字金融新世界

热门文章

  1. APP 自动化测试封装结构模式
  2. zk 加载 html 标签,HTML字符实体——ZK支持字符
  3. 用matlab怎么画频率特性,(matlab)频率特性仿真.pdf
  4. oem718d 基准站设置_华测口袋RTK正式发布!-华测导航
  5. Chrome 浏览器中,使用 Shift + Esc 打开任务管理器 / 浏览器进程管理 结束进程
  6. 不使用border-radius,实现一个可复用的高度和宽度都自适应的圆角矩形
  7. kindle5 去广告
  8. PreparedStatement设置时间
  9. 一个正则替换:一段文本中有若干a img标记,替换文本中的某些词,不包含除了a img标记 中的文字、属性...
  10. 我的RHCE考试终于要开始了!