两表查询很慢mysql_影响mysql性能的方面
一、服务器硬件
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性能的方面相关推荐
- mysql两个查询结果差集_【Mysql】求两个表(查询结果)的差集
求两个查询结果的差集,Mysql直接提供了关键字not in,但是not in的效率极其低下,出现例如求一个上千查询结果在上万查询结果的差集,那么使用not in来查询的查询速度极其缓慢,这是必须使用 ...
- mysql如何链表查询_mysql怎样两表查询?
mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...
- mysql怎样两表查询_mysql怎样两表查询?
mysql两表查询的方法:1.使用"select 字段列表 from 表1,表2 [where 条件]"进行查询:2.使用"SELECT 字段列表 FROM 表1 关键字 ...
- 结构化查询语句简称mysql_整理MySql常用查询语句
MySql的性能优化 性能优化是通过某些有效的方法提高MySQL数据库的性能.性能优化的目的是为了是MySQL数据运行速度更快.占用的磁盘空间更小.性能优化包括很多方面,例如优化查询速度.优化更新速度 ...
- mysql 多表 查询慢_详解Mysql多表联合查询效率分析及优化
1. 多表连接类型1. 笛卡尔积(交叉连接) 在MySQL中可以为CROSS JOIN或者省略CROSS即JOIN,或者使用',' 如: SELECT * FROM table1 CROSS JOI ...
- mysql两表之间字段匹配concat_实例学习MySQL多表之间字段的匹配
多表之间字段进行匹配的sql语句: 复制代码 代码示例: $sql=$empire->query("select table.title,lianxi,table.dizhi,tabl ...
- java mysql 多表查询_Java编程基础32——MySQL多表联查
SQL 会创建多表及多表的关系 1.多表之间的关系如何来维护 添加外键约束: foreign key alter table product add foreign key(cno) referenc ...
- 【SQL SERVE】查询总计金额以及两表查询
表结构: order表: member表: 两表关联:order.MemberId==member.Id select * from (select MemberId,SUM(ActualPayCas ...
- MySQL-性能优化_影响MySQL性能的因素分析及解决方案
文章目录 生猛干货 官方文档 影响性能的几个因素 CPU 内存 磁盘的配置和选择 传统的机械硬盘 RAID SSD 或者 PCIe卡 网络存储SAN (光纤传输)和 NAS (带宽传输) 网络 操作系 ...
最新文章
- URLEncoder和URLDecoder中特殊字符的处理方案 URL传值问题
- SQL 表之间的更新
- 从蚂蚁金服一窥人工智能在金融领域的机遇与挑战
- kali 2020 ssh自启动_自动化所于2020年“国科大杯”创新创业大赛获得多项奖项
- 每天一道LeetCode-----二叉树逐层遍历,每一层存在一个序列中,返回所有序列集合
- 查看某个github commit属于哪一个github pull request
- 在传统行业做数字化转型之团队篇
- linux c之fdopen(int fd, const char *type)使用总结
- 如何创建一个自记录的Makefile
- Java提高篇 —— String缓冲池
- adb remount overlayfs的说明
- 台式机也颤抖!ROG Strix S5AS性能强悍到底
- 【华为云技术分享】用人工智能技术推动西安民俗文化,斗鱼超管团队有一套
- OpenShift 4 - Knative教程 (1) 创建Serverless运行环境
- 可重组合与不相邻组合
- POJ 1635 树的最小表示法
- 想学制作外挂的新手看过来
- 部分移动卡 无人接听时呼叫转移失败 问题分析
- lasso回归python代码_LASSO回归代码实现 坚韧不拔|静水流深|读书|写作|博雅|数据分析|Python|商业|独立·独特·自立门户 kebook...
- 乘风领航、耀世创新——DEFI平台Lizard打造数字金融新世界
热门文章
- APP 自动化测试封装结构模式
- zk 加载 html 标签,HTML字符实体——ZK支持字符
- 用matlab怎么画频率特性,(matlab)频率特性仿真.pdf
- oem718d 基准站设置_华测口袋RTK正式发布!-华测导航
- Chrome 浏览器中,使用 Shift + Esc 打开任务管理器 / 浏览器进程管理 结束进程
- 不使用border-radius,实现一个可复用的高度和宽度都自适应的圆角矩形
- kindle5 去广告
- PreparedStatement设置时间
- 一个正则替换:一段文本中有若干a img标记,替换文本中的某些词,不包含除了a img标记 中的文字、属性...
- 我的RHCE考试终于要开始了!