mysql临时表

大数据量时Mysql的优化要点

空扰寡人 提交于 2019-11-29 14:01:37
如今随着互联网的发展,数据的量级也是撑指数的增长,从GB到TB到PB。对数据的各种操作也是愈加的困难,传统的关系性数据库已经无法满足快速查询与插入数据的需求。这个时候NoSQL的出现暂时解决了这一危机。它通过降低数据的安全性,减少对事务的支持,减少对复杂查询的支持,来获取性能上的提升。但是,在有些场合NoSQL一些折衷是无法满足使用场景的,就比如有些使用场景是绝对要有事务与安全指标的。这个时候NoSQL肯定是无法满足的,所以还是需要使用关系性数据库。 虽然关系型数据库在海量数据中逊色于NoSQL数据库,但是如果你操作正确,它的性能还是会满足你的需求的。针对数据的不同操作,其优化方向也是不尽相同。对于数据移植,查询和插入等操作,可以从不同的方向去考虑。而在优化的时候还需要考虑其他相关操作是否会产生影响。就比如你可以通过创建索引提高查询性能,但是这会导致插入数据的时候因为要建立更新索引导致插入性能降低,你是否可以接受这一降低那。所以,对数据库的优化是要考虑多个方向,寻找一个折衷的最佳方案。 一:查询优化 1:创建索引。 最简单也是最常用的优化就是查询。因为对于CRUD操作,read操作是占据了绝大部分的比例,所以read的性能基本上决定了应用的性能。对于查询性能最常用的就是创建索引。经过测试,2000万条记录,每条记录200字节两列varchar类型的

mysql常见的hint

限于喜欢 提交于 2019-11-29 08:08:36
mysql常用的hint 对于经常使用oracle的朋友可能知道,oracle的hint功能种类很多,对于优化sql语句提供了很多方法。同样,在mysql里,也有类似的hint功能。下面介绍一些常用的。 强制索引 FORCE INDEX SELECT * FROM TABLE1 FORCE INDEX (FIELD1) … 以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。 忽略索引 IGNORE INDEX SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) … 在上面的SQL语句中,TABLE1表中FIELD1和FIELD2上的索引不被使用。 关闭查询缓冲 SQL_NO_CACHE SELECT SQL_NO_CACHE field1, field2 FROM TABLE1; 有一些SQL语句需要实时地查询数据,或者并不经常使用(可能一天就执行一两次),这样就需要把缓冲关了,不管这条SQL语句是否被执行过,服务器都不会在缓冲区中查找,每次都会执行它。 强制查询缓冲 SQL_CACHE SELECT SQL_CALHE * FROM TABLE1; 如果在my.ini中的query_cache_type设成2,这样只有在使用了SQL_CACHE后,才使用查询缓冲。 优先操作 HIGH_PRIORITY

mysql优化2

送分小仙女□ 提交于 2019-11-29 07:24:05
二、优化细节: 1、参数优化 1.1 Max_connections (1)简介 Mysql的最大连接数,如果服务器的并发请求量比较大,可以调高这个值,当然这是要建立在机器能够支撑的情况下,因为如果连接数越来越多,mysql会为每个连接提供缓冲区,就会开销的越多的内存,所以需要适当的调整该值,不能随便去提高设值。 (2)判断依据 show variables like 'max_connections'; +-----------------+-------+ | Variable_name | Value | +-----------------+-------+ | max_connections | 151 | +-----------------+-------+ show status like 'Max_used_connections'; +----------------------+-------+ | Variable_name | Value | +----------------------+-------+ | Max_used_connections | 101 | +----------------------+-------+ 如果max_used_connections跟max_connections相同,那么就是max

mysql 优化(1)

我与影子孤独终老i 提交于 2019-11-29 03:35:54
一、 通过查询缓冲提高查询速度   一般我们使用SQL语句进行查询时,数据库服务器每次在收到客户端 发来SQL后,都会执行这条SQL语句。但当在一定间隔内(如1分钟内),接到完全一样的SQL语句,也同样执行它。虽然这样可以保证数据的实时性,但在 大多数时候,数据并不要求完全的实时,也就是说可以有一定的延时。如果是这样的话,在短时间内执行完全一样的SQL就有些得不偿失。  幸好MySQL为我们提供了查询缓冲的功能(只能在MySQL 4.0.1及以上版本使用查询缓冲)。我们可以通过查询缓冲在一定程度上提高查询性能。 1、我们可以通过在MySQL安装目录中的my.ini文件设置查询缓冲:   设置也非常简单,只需要将query_cache_type设为1 即可。在设置了这个属性后,MySQL在执行任何SELECT语句之前,都会在它的缓冲区中查询是否在相同的SELECT语句被执行过,如果有,并且执行 结果没有过期,那么就直接取查询结果返回给客户端。但在写SQL语句时注意,MySQL的查询缓冲是区分大小写的。如下列的两条SELECT语句: SELECT * FROM TABLE1SELECT * FROM TABLE1   上面的两条SQL语句对于查询缓冲是完全不同的SELECT。而且查询缓冲并不自动处理空格,因此,在写SQL语句时,应尽量减少空格的使用,尤其是在SQL首和尾的空格(因为

mysql临时表创建

你离开我真会死。 提交于 2019-11-28 21:50:34
create table ls_table_tcc as SELECT * FROM SR_MAIN WHERE SYS_SPZT= 1 AND sys_djzt = 0 and (mjzksrq = '' or mjzksrq is null or mjjzbh = '' or mjjzbh is null or mjzjsrq = '' or mjzjsrq is null) and instr('db_jz,kn_jz,wb_jz',mdjlx) > 0; 来源: https://www.cnblogs.com/tongcc/p/11428223.html

【04】MySQL:存储引擎

南笙酒味 提交于 2019-11-28 17:28:46
写在前面的话 在使用 Linux 的时候,可以经常听到有关文件系统 FS(File System)的东西,MySQL 也有属于自己类似的东西,那就是存储引擎。之前在创建数据表的时候,在 Create table 后面一般都加了 engine=innodb。这就是指定存储引擎。 关于存储引擎 可以将存储引擎就当作 Linux 而言的文件系统,其主要功能在于:数据读写 / 安全 / 一致性,提升读写性能,提供热备份,自动故障恢复,高可用等。 需要知道的存储引擎大致有: InnoDB , MyISAM , MEMORY ,ARCHIVE, CSV , BLACKHOLE ,MERGE,NDBCLUSTER,EXAMPLE 等 查看数据库支持的存储引擎: show engines; 结果: 值得注意的是,存储引擎针对的对象是表,这意味着一个库中,可能存在多种存储引擎,例如: select TABLE_NAME,ENGINE from information_schema.tables where TABLE_SCHEMA="mysql"; 结果: 对于 MySQL 的两大分支 Percona 和 MariaDB 的存储引擎: Percona:默认 XtraDB MariaDB:默认 InnoDB 同样也有其它的存储引擎:TokuDB,RocksDB,MyRocks 等。

mysql性能优化策略

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

Mysql SQL语句优化

末鹿安然 提交于 2019-11-28 17:09:04
最近找时间看了下Mysql 5.1的参考手册,作为一个开发者我对自己的要求是重点看看Mysql Replication的原理及机制,以及各种Mysql的Sql优化,毕竟稍微大点的公司都会有更专业的DBA来做数据库优化。 那么对于 Mysql Replication 的理解在上一篇博客中已经简单赘述,这篇文章中只是简单的记录Mysql的一些Sql优化,因为还有些没有看完,而且Mysql参考文档也说明:因为Mysql针对Sql优化的点非常多,所以不可能在文档中全部写出,所以后续这篇博文会不断Update知识点,下面罗列知识点: mysql 优化 1、降低授权许可验证 2、用benchmark函数检验函数或表达式的快慢 3、使用explain 查看执行过程,所谓的查询优化就是尽可能的去掉Using Temporary 等操作 4、外键的字段类型和长度要和主键一致才能走索引 5、在多表关联中使用STRAIGHT_JOIN来强制规定mysql以哪个为基准表 6、如果查询的字段在索引树中就有,那么mysql不需要回表,速度会快很多 7、如果order by 的字段在索引树中有,那么就不需要重新排序 8、如果有一个ORDER BY子句和不同的GROUP BY子句,或如果ORDER BY或GROUP BY包含联接队列中的第一个表之外的其它表的列,则创建一个临时表 待完善。。。 来源:

《高性能 MySQL》读书笔记

会有一股神秘感。 提交于 2019-11-28 17:08:12
结构和历史 1. 隔离级别有四种: READ UNCOMMITTED(未提交读),同事务中某个语句的修改,即使没有提交,对其他事务也是可见的。这个也叫脏读。 READ COMMITTED(提交读),另一个事务只能读到该事务已经提交的修改,是大多数据库默认的隔离级别。但是有下列问题,一个事务中两次读取同一个数据,由于这个数据可能被另一个事务提交了两次,所以会出现两次不同的结果,所以这个级别又叫做不可重复读。这里的不一样的数据包括虚读(两次结果不同)和幻读(出现新的或者缺少了某数据)。 REPEATABLE READ(可重复读),这个级别不允许脏读和不可重复读,比如MYSQL中通过MVCC来实现解决幻读问题。 SERIALIABLE(可串行化),这儿实现了读锁,级别最高。 2. 显示和隐式锁定:事务执行中,随时可以执行锁定,锁只有在COMMIT或ROLLBACK的时候才释放,而且所有的锁是同时释放的。这些锁定都是隐式锁定。也可以通过特定语句显式锁定,比如SELECT … LOCK IN SHARE MODE等。 3. MVCC(多版本并发控制):通过保存数据在某个时间点的快照来实现。在INNODB中通过每行记录后保存两个隐藏的列,一个保存行的创建时间,一个保存行的过期(删除)时间,这儿的保存不是时间而是系统版本号,随着事务的数量增加而增加版本号。 SELECT

MYSQL常用的命令

老子叫甜甜 提交于 2019-11-28 13:58:29
启动:net start mySql;   进入:mysql -u root -p/mysql -h localhost -u root -p databaseName;   列出数据库:show databases;   选择数据库:use databaseName;   列出表格:show tables;   显示表格列的属性:show columns from tableName;   建立数据库:source fileName.txt;   匹配字符:可以用通配符_代表任何一个字符,%代表任何字符串;   增加一个字段:alter table tabelName add column fieldName dateType;   增加多个字段:alter table tabelName add column fieldName1 dateType,add columns fieldName2 dateType;   多行命令输入:注意不能将单词断开;当插入或更改数据时,不能将字段的字符串展开到多行里,否则硬回车将被储存到数据中;   增加一个管理员帐户:grant all on *.* to user@localhost identified by "password";   每条语句输入完毕后要在末尾填加分号';',或者填加'\g'也可以;   查询时间:select