sql优化

高级篇:Mycat的理解

…衆ロ難τιáo~ 提交于 2020-02-11 17:15:36
目录 一、问题导入 1.1高并发Mysql的速度问题怎么解决? 1.2Mysql 挂了怎么办? 1.3 Mysql 超过500W的数据 二、Mycat 的简介 2.1 Mycat 解决Mysql 的并发压力的思路 2.1.1 分库 2.1.2 分表 2.1.3 好处或者面试 2.1.4 Mycat 额外的好处 2.2 Mycat的安装 2.2.1 Mycat 是Java 语言写的,安装Mycat 必须先安装JDK 2.2.2 Mycat的安装 三、Mycat的名词解释 3.1 虚拟库 3.2 虚拟表 3.3 数据节点(**) 3.4 数据库服务器 四、Mycat的配置文件(*mycat的核心*) 4.1 schema.xml 4.1.1 schema (一个虚拟的库)节点 4.1.2 table 标签 4.1.3 dataNode数据节点 4.1.4 DataHost:数据库的服务器 4.2 rule.xml(路由的规则) 4.2.1 tableRule的节点 4.2.2 function 节点 4.3 server.xml 4.3.1 用户的配置 4.3.2 主键增长的节点 五、实战mycat的配置文件 5.1 写一个schema.xml 文件 5.2 rule.xml 文件(我们没有使用别的规则,它里面自动rule1) 5.3 server.xml 5.4 覆盖默认的mycat

TDH sql及plsql的调优

╄→гoц情女王★ 提交于 2020-02-11 01:47:17
TDH sql及plsql的调优 3.1.1 表类型的优化 3.1.2表分桶分区的优化 3.1.3 临时表的使用 3.2.1 列裁剪 3.2.2 条件下压 3.2.3 DISTINCT的优化 3.2.4 null处理优化 3.2.5 小文件过多的优化 3.2.6 范围分区表merge into的优化 3 PLSQL调优 3.1 表的优化 3.1 .1 表类型的优化 文本表主要在数据的导入导出中作为过度表使用,支持insert和load操作,支持分区分桶,一般对于跑批,我们选择ORC格式的表,ORC为列式存储,通常压缩比为 3 ~ 8 ,同时具有轻量级的索引,包括minmaxFilter和BloomFilter , 只支持insert,不支持load,如果该表需要进行事务操作,则需使用ORC事务表, 3.1 .2 表分桶分区的优化 此处优化针对于ORC表: 如果数据量达到百万级,则需对表进行分桶,分桶字段尽量选择离散度较高的列,以避免造成 Bucket的大小过于悬殊,通常如果为ORC表一个桶数据量为压缩前200M,如果为ORC事务表一个桶数据量为压缩前100M,同时分桶数最好为质数,分桶的数量在建表时确定以后就不可更。如果表数据量较大还可进行分区,单值分区或范围分区。 3.1 .3 临时表的使用 对于复杂的多表关联,建议将中间结果集落入物理临时表中,此操作能简化sql解析,理清顺序

Go_MySQL查询插入删除

房东的猫 提交于 2020-02-10 21:14:34
什么是预处理? 普通SQL语句执行过程: 客户端对SQL语句进行占位符替换得到完整的SQL语句。 客户端发送完整SQL语句到MySQL服务端 MySQL服务端执行完整的SQL语句并将结果返回给客户端。 预处理执行过程: 把SQL语句分成两部分,命令部分与数据部分。 先把命令部分发送给MySQL服务端,MySQL服务端进行SQL预处理。 然后把数据部分发送给MySQL服务端,MySQL服务端对SQL语句进行占位符替换。 MySQL服务端执行完整的SQL语句并将结果返回给客户端。 为什么要预处理? 优化MySQL服务器重复执行SQL的方法,可以提升服务器性能,提前让服务器编译,一次编译多次执行,节省后续编译的成本。 避免SQL注入问题。 Go实现MySQL预处理 Go中的 func (db *DB) Prepare(query string) (*Stmt, error) Prepare 方法会先将sql语句发送给MySQL服务端,返回一个准备好的状态用于之后的查询和命令。返回值可以同时执行多个查询和命令。 package main import ( "database/sql" "fmt" _ "github.com/go-sql-driver/mysql" // init() ) // Go连接MySQL示例 var db *sql.DB // db是一个连接池对象

MongoDB 使用B树

你说的曾经没有我的故事 提交于 2020-02-10 18:13:49
概述 MongoDB 是一个通用的、面向文档的分布式数据库[^1],这是官方对 MongoDB 介绍。区别于传统的关系型数据库 MySQL、Oracle 和 SQL Server,MongoDB 最重要的一个特点就是 『面向文档』 ,由于数据存储方式的不同,对外提供的接口不再是被大家熟知的 SQL,所以被划分成了 NoSQL,NoSQL 是相对 SQL 而言的,很多我们耳熟能详的存储系统都被划分成了 NoSQL,例如:Redis、DynamoDB[^2] 和 Elasticsearch 等。 NoSQL 经常被理解成没有 SQL(Non-SQL)或者非关系型(Non-Relational)[^3],不过也有人将其理解成不只是 SQL(Not Only SQL)[^4],深挖这个词的含义和起源可能没有太多意义,这种二次解读很多时候都是为营销服务的,我们只需要知道 MongoDB 对数据的存储方式与传统的关系型数据库完全不同。 MongoDB 的架构与 MySQL 非常类似,它们底层都使用了可插拔的存储引擎以满足用户的不同需求,用户可以根据数据特征选择不同的存储引擎,最新版本的 MongoDB 使用了 WiredTiger 作为默认的存储引擎[^5]。 作为 MongoDB 默认的存储引擎,WiredTiger 使用 B 树作为索引底层的数据结构,但是除了 B 树之外,它还支持 LSM

MySQL索引策略及优化

别说谁变了你拦得住时间么 提交于 2020-02-10 16:38:04
MySQL的优化主要分为结构优化(Scheme optimization)和查询优化(Query optimization)。本章讨论的高性能索引策略主要属于结构优化范畴。本章的内容完全基于上文的理论基础,实际上一旦理解了索引背后的机制,那么选择高性能的策略就变成了纯粹的推理,并且可以理解这些策略背后的逻辑。 1. 示例数据库 为了讨论索引策略,需要一个数据量不算小的数据库作为示例。本文选用MySQL官方文档中提供的示例数据库之一:employees。这个数据库关系复杂度适中,且数据量较大。下图是这个数据库的E-R关系图(引用自MySQL官方手册): MySQL官方文档中关于此数据库的页面为 http://dev.mysql.com/doc/employee/en/employee.html 。里面详细介绍了此数据库,并提供了下载地址和导入方法,如果有兴趣导入此数据库到自己的MySQL可以参考文中内容。 2. 最左前缀原理与相关优化 高效使用索引的首要条件是知道什么样的查询会使用到索引,这个问题和B+Tree中的“最左前缀原理”有关,下面通过例子说明最左前缀原理。 这里先说一下联合索引的概念。在上文中,我们都是假设索引只引用了单个的列,实际上,MySQL中的索引可以以一定顺序引用多个列,这种索引叫做联合索引,一般的,一个联合索引是一个有序元组<a1, a2, …, an>

【转】MySql索引

与世无争的帅哥 提交于 2020-02-10 15:21:32
https://segmentfault.com/a/1190000010991930 索引(key)是存储引擎用于快速找到记录的一种数据结构。它和一本书中目录的工作方式类似——当要查找一行记录时,先在索引中快速找到行所在的位置信息,然后再直接获取到那行记录。 在MySql中,索引是在存储引擎层而不是服务器层实现的,所以不同的存储引擎对索引的实现和支持都不相同。 B-TREE索引 B-TREE索引是使用最多的索引。很多存储引擎采用的都是B-TREE数据结构的变体实现该索引,例如InnoDB使用的是B+TREE,即每个叶子节点都包含指向下一个叶子节点的指针,从而方便叶子节点范围遍历。 不同存储引擎使用B-TREE索引的方式也不同。例如MyISAM使用前缀压缩技术使索引更小,而InnoDB则按照原数据格式进行存储。再如MyISAM索引通过数据的物理位置引用被索引的行,而InnoDB则根据主键引用被索引的行。 B-TREE中的所有值都是按顺序存储的,每个叶子页到根的距离相同。下图展示了InnoDB中的B-TREE索引是如何工作的: 当查找一行记录时,存储引擎会先在索引中搜索。从索引的根节点开始,通过比较节点页的值和要查找的值逐层进入下层节点,最底层叶子节点的指针指向的是被索引的数据。这样的查找方式避免了全表扫描,加快访问数据的速度。此外因为B-Tree对索引列是顺序存储的

MySQL my.cnf详解

你说的曾经没有我的故事 提交于 2020-02-10 12:27:14
1 #*** client options 相关选项 ***# 2 #以下选项会被MySQL客户端应用读取。注意只有MySQL附带的客户端应用程序保证可以读取这段内容。如果你想你自己的MySQL应用程序获取这些值。需要在MySQL客户端库初始化的时候指定这些选项。[client] 3 port = 3306 4 socket = /usr/local/mysql/tmp/mysql.sock 5 [mysqld]!include /usr/local/mysql/etc/mysqld.cnf 6 #包含的配置文件 ,把用户名,密码文件单独存放 7 port = 3306 8 bind-address = 0.0.0.0 9 server-id = 1 10 #表示是本机的序号为1,唯一 11 socket = /usr/local/mysql/tmp/mysql.sock 12 pid-file = /usr/local/mysql/var/mysql.pid 13 basedir = /usr/local/mysql/ 14 datadir = /usr/local/mysql/var/ 15 tmpdir = /usr/local/mysql/tmp/ 16 #此目录被 MySQL用来保存临时文件.例如,它被用来处理基于磁盘的大型排序,和内部排序一样,以及简单的临时表

DB2 SQL性能调优秘笈

扶醉桌前 提交于 2020-02-10 09:47:16
《DB2 SQL性能调优秘笈》 基本信息 作者: (美)Tony Andrews 译者: 陈勇 杨健康 丛书名: 华章程序员书库 出版社:机械工业出版社 ISBN:9787111425021 上架时间:2013-6-4 出版日期:2013 年6月 开本:16开 页码:86 版次:1-1 所属分类:计算机 更多关于 》》》《 DB2 SQL性能调优秘笈 》 内容简介 计算机书籍   《db2 sql性能调优秘笈》是一本不可多得的db2数据库性能调优秘笈,由拥有20余年db2工作经验的资深数据库专家撰写,amazon全五星评价畅销书。本书不仅详尽阐述了100余条sql语句优化的技巧和最佳实践、编写高性能sql语句的标准和原则,以及db2数据库性能优化的“15步法”,而且还包含大量案例,为解决各种复杂的db2性能问题提供了解决方案。    《db2 sql性能调优秘笈》共7章:第1章总结了116条优化sql语句的技巧和最佳实践;第2章讲解了 sql语句中提示的编写方法和技巧;第3章讲解了编写高质量sql语句需要遵守的sql标准和原则;第4章介绍了sql程序走查;第5章用2个实例介绍了如何检查存在性;第6章介绍了runstats,用来得到一些统计信息;第7章讲解了db2性能优化的“15步调优法”,被誉为db2性能调优领域的无价之宝,适用于各种情况下的性能调优问题。本书最后还有2个附录

《精通Oracle SQL(第2版)》PDF

浪子不回头ぞ 提交于 2020-02-10 09:47:00
一:下载途径 二:图书图样 三:目录 第1章 SQL核心  1.1 SQL语言  1.2 数据库的接口  1.3 SQL*Plus回顾  1.3.1 连接到数据库  1.3.2 配置SQL*Plus环境  1.3.3 执行命令  1.4 5个核心的SQL语句  1.5 SELECT语句  1.5.1 FROM子句  1.5.2 WHERE子句  1.5.3 GROUP BY子句  1.5.4 HAVING子句  1.5.5 SELECT列表  1.5.6 ORDER BY子句  1.6 INSERT语句  1.6.1 单表插入  1.6.2 多表插入  1.7 UPDATE语句  1.8 DELETE语句  1.9 MERGE语句  1.10 小结  第2章 SQL执行  2.1 Oracle架构基础  2.2 SGA共享池  2.3 库高速缓存  2.4 完全相同的语句  2.5 SGA缓冲区缓存  2.6 查询转换  2.6.1 查询块  2.6.2 视图合并  2.6.3 子查询解嵌套  2.6.4 联结消除  2.6.5 排序消除  2.6.6 谓词推进  2.6.7 使用物化视图进行查询重写  2.7 确定执行计划  2.8 执行计划并取得数据行  2.9 SQL执行——总览  2.10 小结  第3章 访问和联结方法  3.1 全扫描访问方法  3.1.1

Django的ORM操作-FQ-事物

ぃ、小莉子 提交于 2020-02-10 06:13:06
1,必知必会13条 <1> all(): 查询所有结果 <2> filter(**kwargs): 它包含了与所给筛选条件相匹配的对象 <3> get(**kwargs): 返回与所给筛选条件相匹配的对象,返回结果有且只有一个,如果符合筛选条件的对象超过一个或者没有都会抛出错误。 <4> exclude(**kwargs): 它包含了与所给筛选条件不匹配的对象 <5> values(*field): 返回一个ValueQuerySet——一个特殊的QuerySet,运行后得到的并不是一系列model的实例化对象,而是一个可迭代的字典序列 <6> values_list(*field): 它与values()非常相似,它返回的是一个元组序列,values返回的是一个字典序列 <7> order_by(*field): 对查询结果排序 <8> reverse(): 对查询结果反向排序,请注意reverse()通常只能在具有已定义顺序的QuerySet上调用(在model类的Meta中指定ordering或调用order_by()方法)。 <9> distinct(): 从返回结果中剔除重复纪录(如果你查询跨越多个表,可能在计算QuerySet时得到重复的结果。此时可以使用distinct(),注意只有在PostgreSQL中支持按字段去重。) <10> count():