mysql临时表

MySQL 优化

删除回忆录丶 提交于 2019-11-28 12:51:36
MySQL 优化 表关联查询时务必遵循 小表驱动大表 原则; 使用查询语句 where 条件时,不允许出现 函数 ,否则索引会失效; 使用单表查询时,相同字段尽量不要用 OR ,因为可能导致索引失效,比如: SELECT * FROM table WHERE name = '手机' OR name = '电脑' ,可以使用 UNION 替代; LIKE 语句不允许使用 % 开头,否则索引会失效; 组合索引一定要遵循 从左到右 原则,否则索引会失效;比如: SELECT * FROM table WHERE name = '张三' AND age = 18 ,那么该组合索引必须是 name,age 形式; 索引不宜过多,根据实际情况决定,尽量不要超过 10 个; 每张表都必须有 主键 ,达到加快查询效率的目的; 分表,可根据业务字段尾数中的个位或十位或百位(以此类推)做表名达到分表的目的; 分库,可根据业务字段尾数中的个位或十位或百位(以此类推)做库名达到分库的目的; 表分区,类似于硬盘分区,可以将某个时间段的数据放在分区里,加快查询速度,可以配合 分表 + 表分区 结合使用; # 神器 EXPLAIN 语句 EXPLAIN 显示了 MySQL 如何使用索引来处理 SELECT 语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在 SELECT 语句前加上

MySQL 了解知识点

ぐ巨炮叔叔 提交于 2019-11-28 08:01:46
一 视图 二 触发器 三 事务 四 存储过程 五 函数 六 流程控制 一 视图 视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称】即可获取结果集,可以将该结果集当做表来使用。 使用视图我们可以把查询过程中的临时表摘出来,用视图去实现,这样以后再想操作该临时表的数据时就无需重写复杂的sql了,直接去视图中查找即可,但视图有明显地效率问题,并且视图是存放在数据库中的,如果我们程序中使用的sql过分依赖数据库中的视图,即强耦合,那就意味着扩展sql极为不便,因此并不推荐使用 临时表应用举例 一 创建视图 View Code 二 使用视图 #修改视图,原始表也跟着改 mysql> select * from course; +-----+--------+------------+ | cid | cname | teacher_id | +-----+--------+------------+ | 1 | 生物 | 1 | | 2 | 物理 | 2 | | 3 | 体育 | 3 | | 4 | 美术 | 2 | +-----+--------+------------+ 4 rows in set (0.00 sec) mysql> create view course_view as select * from

MySQL(四)执行计划

北城余情 提交于 2019-11-28 05:01:24
转载自: Oo若离oO ,原文链接 在MySQL中使用explain查询SQL的执行计划 目录 一、什么是执行计划 二、如何分析执行计划 一、什么是执行计划 要对执行计划有个比较好的理解,需要先对MySQL的基础结构及查询基本原理有简单的了解。 MySQL本身的功能架构分为三个部分,分别是 应用层、逻辑层、物理层,不只是MySQL,其他大多数数据库产品都是按这种架构来进行划分的。 应用层:主要负责与客户端进行交互,建立链接,记住链接状态,返回数据,响应请求,这一层是和客户端打交道的。 逻辑层:主要负责查询处理、事务管理等其他数据库功能处理,以查询为例。 首先接收到查询SQL之后,数据库会立即分配一个线程对其进行处理,第一步查询处理器会对SQL查询进行优化, 优化后会生成执行计划 ,然后交由计划执行器来执行。 计划执行器需要访问更底层的事务管理器,存储管理器来操作数据,他们各自的分工各有不同,最终通过调用物理层的文件获取到查询结构信息,将最终结果响应给应用层。 物理层,实际物理磁盘上存储的文件,主要有分文数据文件,日志文件。 通过上面的描述,生成执行计划是执行一条SQL必不可少的步骤,一条SQL性能的好坏,可以通过查看执行计划很直观的看出来,执行计划提供了各种查询类型与级别,方面我们进行查看以及作为性能分析的依据。 二、如何分析执行计划 MySQL为我们提供了 explain

MySQL权限整理及授权命令

北战南征 提交于 2019-11-27 12:26:42
MySQL是经常要使用的一种关系型数据库,数据库作为存储重要数据的地方,相应的,对数据库的授权管理,也必须很小心,下面,我将MySQL的权限作了整理,方便需要的时候查看。 MySQL权限级别 服务器 》 数据库 》 表 》 列 另外还有存储过程、视图和索引 MySQL权限列表: 权 限 作用范围 作 用 all 服务器 所有权限 select 表、列 选择行 insert 表、列 插入行 update 表、列 更新行 delete 表 删除行 create 数据库、表、索引 创建 drop 数据库、表、视图 删除 reload 服务器 允许使用flush语句 shutdown 服务器 关闭服务 process 服务器 查看线程信息 file 服务器 文件操作 grant option 数据库、表、存储过程 授权 references 数据库、表 外键约束的父表 index 表 创建/删除索引 alter 表 修改表结构 show databases 服务器 查看数据库名称 super 服务器 超级权限 create temporary tables 表 创建临时表 lock tables 数据库 锁表 execute 存储过程 执行 replication client 服务器 允许查看主/从/二进制日志状态 replication slave 服务器 主从复制 create

linux下操作 mysql的基本命令

不羁的心 提交于 2019-11-27 11:47:01
1, 创建mysqld数据库的管理用户: 要把root用户设置为管理员,我们应该运行下面的命令; [root@linuxsir01 root]# mysqladmin -u root password 123456 一般情况下,mysqladmin所在目录已经加到$PATH中,如果该命令没有找到,查看软件包安装是否正确,确保Mysql-server和Mysql-client两个软件包都已经安装成功,然后可以rpm -qf Mysql-client查看该命令安装到那个目录中,将该目录加到$PATH变量中,或者-www.2cto.com-使用全路径。 需要注意的是,这里的root不是系统用户,而是数据库用户了。你也可以取别的用户名。 2, 登陆mysql数据库 以mysql数据库管理员root,密码为123456为例; [root@linuxsir01root]#/opt/mysql/bin/mysql -u root -p 如果找不到该命令,检查PATH变量,出现 Enter password:输入密码,回车。 然后出现: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 9 Server version: 5.5.8 MySQL Community Server

MYSQL调优总结1

被刻印的时光 ゝ 提交于 2019-11-27 11:45:56
如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 答:大的思路-------- 是周期性的变化还是偶尔问题? 是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间. 唯一的办法-----监测并观察服务器的状态. 1:观察服务器状态, 一般用如下2个命令 Show processlist; 这个命令是显示当前所有连接的工作状态. 如果观察到以下状态,则需要注意 converting HEAP to MyISAM 查询结果太大时,把结果放在磁盘 (语句写的不好,取数据太多) create tmp table 创建临时表(如group时储存中间结果,说明索引建的不好) Copying to tmp table on disk 把内存临时表复制到磁盘 (索引不好,表字段选的不好) locked 被其他查询锁住 (一般在使用事务时易发生,互联网应用不常发生) logging slow query 记录慢查询 例: mysql> show status; 查看链接状态 mysql 5.5 以后加了一个profile设置,可以观察到具体语句的执行步骤. 0:查看profile是否开启 > Show variables like ‘profiling’ 1:> set profiling=on; mysql>

MYSQL调优总结1

喜欢而已 提交于 2019-11-27 11:45:43
如果一台服务器出现长时间负载过高 /周期性负载过大,或偶尔卡住如何来处理? 答:大的思路-------- 是周期性的变化还是偶尔问题? 是服务器整体性能的问题, 还是某单条语句的问题? 具体到单条语句, 这条语句是在等待上花的时间,还是查询上花的时间. 唯一的办法-----监测并观察服务器的状态. 1:观察服务器状态, 一般用如下2个命令 Show processlist; 这个命令是显示当前所有连接的工作状态. 如果观察到以下状态,则需要注意 converting HEAP to MyISAM 查询结果太大时,把结果放在磁盘 (语句写的不好,取数据太多) create tmp table 创建临时表(如group时储存中间结果,说明索引建的不好) Copying to tmp table on disk 把内存临时表复制到磁盘 (索引不好,表字段选的不好) locked 被其他查询锁住 (一般在使用事务时易发生,互联网应用不常发生) logging slow query 记录慢查询 例: mysql> show status; 查看链接状态 mysql 5.5 以后加了一个profile设置,可以观察到具体语句的执行步骤. 0:查看profile是否开启 > Show variables like ‘profiling’ 1:> set profiling=on; mysql>

Mysql运维常用命令回顾整理

回眸只為那壹抹淺笑 提交于 2019-11-27 10:44:19
前景 Mysql作为开源数据库的中坚力量之一,虽然目前已被甲骨文收购,面临闭源风险,但是mysql扔是我们运维工作中最常面对的工作,那如何做好mysql运维工作,甚至做好mysql的基础运维,都是维稳业务持久层的关键,故本文收集相关资料整理MySQL运维工作常用的命令,以作记录,供日常运维时参考查证。 Mysql运维 MySQL运维工作常用命令和操作主要包括:对MySQL数据库状态的查看、性能的优化(连接数,存储,集群等),MySQL表及索引的检查、分析、修复、优化,MySQL数据库的导出导入、冷热备份等。 1、工具篇 常用工具: 1)myisampack:压缩MySQL的MyISAM表以产生更小的只读表的一个工具。myisampack可以压缩MyISAM表来解决空间占用过大的问题。myisampack分别压缩表中的每一列。通常,myisampack可以将数据文件压缩到40%-70%。当以后使用表时,解压缩列需要的信息被读入内存。当访问具体的记录时性能会更好,因为你只需要解压缩一个记录。 2)mysqlaccess:检查访问主机名、用户名和数据库组合的权限的脚本。它可作为MySQL的一个诊断工具,检查访问权限的主机名、用户名和数据库组合。其检查功能只访问user、db和host这3个表,而不检查在tables_priv、columns_priv或procs_priv表等信息; 3

从MYSQL的ibtmp1文件太大说起

↘锁芯ラ 提交于 2019-11-27 10:20:13
1. 啥情况呀 测试环境机器磁盘空间不足的告警打破了下午的沉寂,一群人开始忙活着删数据。但是,不久前刚清理了一波数据,测试环境在没做压测的情况下不至于短短一个月不到就涨了200G数据,于是,我悄悄的进入数据目录下,发现一个不寻常的点,ibtmp1文件有192G ll -h ibtmp1 -rw-r----- 1 mysql mysql 192G Aug 12 16:20 ibtmp1 2. 怎么处理 2.1 简单说明 ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在支持大文件的系统这个文件大小是可以无限增长的。 2.2 解决办法 a) 找个空闲时间关闭数据 # 设置innodb_fast_shutdown参数 SET GLOBAL innodb_fast_shutdown = 0; # 此步骤可以省略 # 关闭数据库实例 shutdown; # 因本实例为MySQL5.7 可以直接在SQL命令行中shutdown关闭 关闭后ibtmp1文件会自动清理 b) 修改my.cnf配置文件 为了避免ibtmp1文件无止境的暴涨导致再次出现此情况,可以修改参数,限制其文件最大尺寸。 如果文件大小达到上限时

叶问13

我怕爱的太早我们不能终老 提交于 2019-11-27 05:32:42
《叶问》是知数堂新设计的互动栏目,不定期给大家提供技术知识小贴士,形式不限,或提问、或讨论均可,并在当天发布答案,让大家轻轻松松利用碎片时间就可以学到最实用的知识点。 2019年03月5日,周二 MySQL binlog_format=mixed,可行吗,为什么 不可行,因为会导致主从数据不一致 Mixed格式相当于 Row 和 Statement 模式的融合。遇到表结构变更的时候就会以statement模式来记录。像update或者delete等修改数据的语句,还是会记录所有行的变更。 但某些情况就会产生主从数据不一致例如: 1、当带有自增主键的更新多个列的表,并调用触发器或存储函数时 2、当SQL使用LOAD_FILE()功能时。(Bug#39701) 3、当SQL语句引用一个或多个系统变量时。(Bug#331168) 更多请参考,https://dev.mysql.com/doc/refman/8.0/en/binary-log-mixed.html 2019年03月26日,周二 MySQL误删除frm文件该怎么办? 情况一:误删后还未重启MySQL 1、从proc中恢复.frm文件 cp /proc/`pidof mysqld`/fd/误删除的.frm /datadir/db/对应库的目录/ 情况二:误删后也重启MySQL了 2、从备份中获取表结构 2.1 物理备份