mysql临时表

mysql 临时表和内存表

眉间皱痕 提交于 2020-03-07 09:02:53
查看内存表的最大值: show variables like '%heap%';  mysql> show variables like '%heap%'; +---------------------+----------+ | Variable_name | Value | +---------------------+----------+ | max_heap_table_size | 16777216 | +---------------------+----------+ 1 row in set (0.01 sec) 修改方法: 1)启动选项中修改启动mysql的时候加参数 -O max_heap_table_size=32M 2)修改MySQL的配置文件,在[mysqld]的段中增加 max_heap_table_size=32M , 3)MySQL客户端工具中执行命令 set global max_heap_table_size=32777216; 注意 内存表 对于变长数据的处理,例如:varchar(50)这样的字段,对于MyISAM的表结构而言,会按照字段中实际存储的内容计算空间, 而内存表则按照char(50)的方式计算空间,这样就会使内存表占据的空间大幅度上升 内存表不支持like操作,性能是非常的差。 内存表: 1. 参数控制:max_heap

Mysql Explain 关键字

有些话、适合烂在心里 提交于 2020-03-05 17:51:15
在日常工作中,我们会有时会开慢查询去记录一些执行时间比较久的SQL语句,找出这些SQL语句并不意味着完事了,些时我们常常用到explain这个命令来查看一个这些SQL语句的执行计划,查看该SQL语句有没有使用上了索引,有没有做全表扫描,这都可以通过explain命令来查看。所以我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用。 -- 实际SQL,查找用户名为Jefabc的员工 select * from emp where name = 'Jefabc'; -- 查看SQL是否使用索引,前面加上explain即可 explain select * from emp where name = 'Jefabc'; expain出来的信息有10列,分别是id、select_type、table、type、possible_keys、key、key_len、ref、rows、Extra 概要描述: id:选择标识符 select_type:表示查询的类型。 table:输出结果集的表 partitions:匹配的分区 type:表示表的连接类型 possible_keys:表示查询时,可能使用的索引 key:表示实际使用的索引 key_len:索引字段的长度 ref:列与索引的比较 rows

MySQL Binlog--binlog_format参数

走远了吗. 提交于 2020-03-04 07:42:16
===================================================================================== binlog_format参数介绍 binlog_format 在mysql 5.1 版本前,所有二进制文件的格式都是基于SQL语句级别的,在mysql 5.1 版本后引入binlog_format参数,可以设置为STATEMENT\ROW\MIXED ROW 日志中会记录成每一行数据被修改的形式,然后在 slave 端再对相同的数据进行修改。 Statement 每一条会修改数据的 SQL 都会记录到 master 的 bin-log 中。slave 在复制的时候 SQL 进程会解析成和原来 master 端执行过的相同的 SQL 再次执行。 Mixed 在 Mixed 模式下,MySQL 会根据执行的每一条具体的 SQL 语句来区分对待记录的日志形式,也就是在 statement 和 row 之间选择一种。新版本中的 statment 还是和以前一样,仅仅记录执行的语句。而新版本的 MySQL 中对 row 模式也被做了优化,并不是所有的修改都会以 row 模式来记录,比如遇到表结构变更的时候就会以 statement 模式来记录,如果 SQL 语句确实就是 update 或者 delete 等修改数据的语句

mysql优化

久未见 提交于 2020-03-03 23:20:42
一、SQL语句优化 (1)使用limit对查询结果的记录进行限定 (2)避免select *,将需要查找的字段列出来 (3)使用连接(join)来代替子查询 (4)拆分大的delete或insert语句 二、选择合适的数据类型 (1)使用可存下数据的最小的数据类型,整型 < date,time < char,varchar < blob (2)使用简单的数据类型,整型比字符处理开销更小,因为字符串的比较更复杂。如,int类型存储时间类型,bigint类型转ip函数 (3)使用合理的字段属性长度,固定长度的表会更快。使用enum、char而不是varchar (4)尽可能使用not null定义字段 (5)尽量少用text,非用不可最好分表 三、选择合适的索引列 (1)查询频繁的列,在where,group by,order by,on从句中出现的列 (2)where条件中<,<=,=,>,>=,between,in,以及like 字符串+通配符(%)出现的列 (3)长度小的列,索引字段越小越好,因为数据库的存储单位是页,一页中能存下的数据越多越好 (4)离散度大(不同的值多)的列,放在联合索引前面。查看离散度,通过统计不同的列值来实现,count越大,离散程度越高: mysql> SELECT COUNT(DISTINCT column_name) FROM table_name;

Mysql必知必会

非 Y 不嫁゛ 提交于 2020-03-03 15:21:22
查看有哪些库 show databases ; 查看当前库中有哪些表 show tables 查看表中有哪些列 show columns from table_name ; describe table_name ; 查看服务器状态 show status ; 查看建表语句或者创建数据库的语句 show create table table_name show create database database_name ; 用来显示授权用户的安全权限 show grants 用来显示服务器错误或者警告 show errors show warnings limit语句 # 表示从第三行(包括)开始取值,取四条数据(mysql的行是从0开始的) select id from table_name limit 3 , 4 ; # Mysql5版本支持同样语义的写法: select id from table_name limit 4 offset 3 ; sql语句中使用全限定名称 select table_name . column_name from database_name . table_name ; order by 的说明 order by 多个列的时候,只有当第一个列相同的时候,才会根据第二个列进行排序,以此类推,但是如果第一个列是唯一的话,

7.3. 锁定事宜

回眸只為那壹抹淺笑 提交于 2020-03-02 11:35:16
7.3. 锁定事宜 7.3.1. 锁定方法 7.3.2. 表锁定事宜 7.3.1. 锁定方法 MySQL 5.1 支持对 MyISAM 和 MEMORY 表进行表级锁 定,对 BDB 表进行页级锁定,对 InnoDB 表进行行级锁定。 在许多情况下,可以根据培训猜测应用程序使用哪类锁定类型最好,但一般很难说出某个给出的锁类型就比另一个好。一切取决于应用程序,应用程序的不同部分可 能需要不同的锁类型。 为了确定是否想要使用行级锁定的存储引擎,应看看应用程序做什么并且混合使用什么样的选择和更新语句。例如,大多数 Web 应 用程序执行许多选择,而很少进行删除,只对关键字的值进行更新,并且只插入少量具体的表。基本 MySQL MyISAM 设置已经调节得很好。 在 MySQL 中对于使用表级锁定的存储引擎,表锁定时不会死锁的。这通过总是在一个查询开始时立即请求所有必要的锁定并且 总是以同样的顺序锁定表来管理。 对 WRITE , MySQL 使 用的表锁定方法原理如下: 如果在表上没有锁,在它上面放一个写锁。 否则,把锁定请求放在写锁定队列中。 对 READ , MySQL 使用的锁定方法 原理如下: 如果在表上没有写锁定,把一个读锁定放在它上面。 否则,把锁请求放在读锁定队列中。 当一个锁定被释放时,锁定可被写锁定队列中的线程得到,然后是读锁定队列中的线程。 这意味着

day62:mysql主从配置

人走茶凉 提交于 2020-03-02 10:50:19
1、主从介绍: mysql主从又叫Replication,AB两台机器复制,也就是说是AB两台机器做了主从后,在A机器上写数据,另一台B机器也会跟中写数据,两者数据实时同步: mysql主从是基于 binlog ,主上必须开启 binlog 才能进行主从:binlog是一个 二进制的日记文件 : mysql主从的过程步骤 : 1:主将更改操作记录(增删改)到 binlog 里: 2:从将主的 binlog事件 ( SQL语句 )同步到从本机并记录 relaylog 中: 3:从根据 relaylog 里面的语句按数据严格执行: 注释: 主从过程涉及到三个线程, 主(logdump线程) 从(I/O线程、SQL线程) 主上 有一个 线程(logdump) 用来和从的 I/O线程 传递binlog: 从上有两个线程: I/O线程 用来同步主的binlog至本机并生成 relaylog : SQL线程 用来把r elaylog里的sql语句 按数据执行: 附记: master主会把操作记录到binlog中,通过线程dumplog和从线程I/O线程传递binlog,从通过线程I/O收到binlog后至本机生成relaylog,并通过线程SQL来按顺序执行relaylog里的sql语句: 应用场景 : 1、 用于备份重要数据:(仅仅只作为备份):主机器宕机,从机器还能随时对web提供服务:

mysql详解

佐手、 提交于 2020-03-01 11:59:43
mysql命令 mysql登录参数: -D, --database 指定数据库 --delimiter 指定分隔符 -h, --host 指定服务器地址 -p, --password 指定密码 -P, --port 指定端口 --prompt 设置提示符 -u, --user 指定用户名 -V, --version 输出版本信息并退出 修改命令提示符: 通过参数指定提示符, mysql -uroot -p123456 --prompt 提示符 通过命令指定提示符, mysql> prompt 提示符; 提示符: \D 完整的日期 \d 当前数据库 \h 服务器名称 \u 当前数据库 常用命令: SELECT VERSION(); 显示当前服务器版本 SELECT NOW(); 显示当前日期时间 SELECT USER(); 显示当前用户 mysql语句规范: 1. 关键字与函数名称全部大写 2. 数据库名称、表名称、字段名称全部小写 3. SQL语句必须以分号结尾 操作数据库 CREATE DATABASE 创建数据库 ALTER DATABASE 修改数据库 DROP DATABASE 删除数据库 创建数据库: {} 为必选项; | 表示或; [] 为可选项。下同 CREATE { DATABASE | SCHEMA } [ IF NOT EXISTS ] db_name [

MySQL性能优化(一):MySQL架构与核心问题

邮差的信 提交于 2020-02-29 17:33:43
一、前言 作为程序员的你,数据库作为一门必修课,而MySQL数据库毫无疑问已经是最常用的数据库了。系统的稳定、高效、高并发等指标,很大程度上取决于数据库性能是否够优,可见性能优化的重要性,这也就不难理解各位在任何一场面试中都会被问及到数据库调优相关的问题。 因此,这就是我为何考虑写该系列文章的主要原因,希望该系列文章( MySQL性能优化 )能够给你带来收获,让你更系统、更全面的掌握MySQL性能优化的技能、技巧。该系列文章将会持续分享、更新,如果觉得现在或者将来可能对你有用,不妨持续关注、收藏。 在MySQL性能优化之前,你有必要重新再认识下MySQL,便于后续更容易理解MySQL性能优化中涉及到的知识点。本文将从MySQL架构、核心问题来针对性展开讨论,这也将是 MySQL性能优化 系列文章的开篇之作。 二、MySQL逻辑架构 想深入探究MySQL之前,有必要了解一下MySQL的逻辑架构,逻辑架构图如下: MySQL的逻辑架构中,分为三层,如上图红色虚线框的三部分。 最上层架构并不是MySQL所独有的,大多数基于客户端/服务器形态的系统或者服务,都有类似的架构,其中包含MySQL的连接处理、授权认证、安全控制等等。 第二层架构是MySQL中最为核心的部分,其中包括查询解析、分析、优化、缓存以及所有的内置函数(如:日期、时间、函数等),所有跨存储引擎的功能都在这一层实现,例如

【MySQL】Explain详解与索引优化实战

邮差的信 提交于 2020-02-28 12:58:40
目录 1、使用的表 2、explain 中的列 2.1 id列 1)简单子查询 2)from子句中的子查询 3)union查询 2.2 select_type列 2.3 table列 2.4 type列 2.5 possible_keys列 2.6 key列 2.7 key_len列 2.8 ref列 2.9 rows列 2.10 Extra列 3、索引优化实战 2.1 使用的表 2.2 索引优化原则 EXPLAIN命令(执行计划)是查看优化器如何决定执行查询的主要方法。使用EXPLAIN关键字可以模拟优化器执行SQL语句,从而知道MySQL是 如何处理你的SQL语句的,让我们知道 SQL 的执行计划 ,可以帮助我们深入了解MySQL的基于开销的优化器,还可以获得很多可能被优化器考虑到的访问策略的细节,以及当运行SQL语句时哪种策略预计会被优化器采用,进而分析你的查询语句或是结构的性能瓶颈。 下面是使用 explain 的例子: 在 select 语句之前增加 explain 关键字,MySQL 会在查询上设置一个标记,执行查询时,会返回执行计划的信息,而不是执行这条SQL(如果 from 中包含子查询,仍会执行该子查询,将结果放入临时表中) 1 、使用的表 DROP TABLE IF EXISTS `actor`; CREATE TABLE `actor` ( `id` int