sql优化

oracle统计信息-11新特性多列统计信息

好久不见. 提交于 2020-01-28 03:54:12
当where子句后指定了一个表的多个列条件时,优化器通常会将多个列的选择性(selectivity)相乘得到where语句的选择性,导致优化器做出错误判断! Oracle 11g引入了多列统计信息概念,如果上面情况列关联性很好,我们可以做多列统计信息收集,让优化器做出正确判断。 例如: SQL> select count(*) from sh.customers where CUST_STATE_PROVINCE = 'CA'; COUNT(*) ---------- 3341 SQL> select count(*) from sh.customers where CUST_STATE_PROVINCE = 'CA' and country_id=52790; COUNT(*) ---------- 3341 SQL> select count(*) from sh.customers where CUST_STATE_PROVINCE = 'CA' and country_id=52775; COUNT(*) ---------- 0 可以看出表customers的列CUST_STATE_PROVINCE、country_id是有关系的,只有多列统计信息才能让优化器知道他们的关系,从而有一个更精确的选择性(selectiveity)。 1 、创建 Column Group :

MySQL 索引深入剖析

点点圈 提交于 2020-01-27 19:02:41
1. 索引是什么? 1.1. 索引是什么 一张表有 500 万条数据,在没有索引的 name 字段上执行一条 where 查询: select * from user_innodb where name = ' 青山 ' ; 如果 name 字段上面有索引呢?在 name 字段上面创建一个索引,再来执行一下相 同的查询。 ALTER TABLE user_innodb DROP INDEX idx_name; ALTER TABLE user_innodb ADD INDEX idx_name (name); 有索引的查询和没有索引的查询相比,效率相差几十倍。 通过这个案例大家应该可以非常直观地感受到,索引对于数据检索的性能改善是非 常大的。 那么索引到底是什么呢?为什么可以对我们的查询产生这么大的影响?创建索引的 时候发生了什么事情? 1.1.1.索引定义 维基百科对数据库索引的定义: 数据库索引,是数据库管理系统(DBMS)中一个排序的数据结构,以协助快速查询、更新数据库表中数据。 数据是以文件的形式存放在磁盘上面的,每一行数据都有它的磁盘地址。如果没有 索引的话,我们要从 500 万行数据里面检索一条数据,只能依次遍历这张表的全部数据, 直到找到这条数据。 但是我们有了索引之后,只需要在索引里面去检索这条数据就行了,因为它是一种 特殊的专门用来快速检索的数据结构

Mysql调优-explain的使用

我的梦境 提交于 2020-01-27 18:55:08
Mysql-expalin的使用 explain简介 explain输出列解释 explain输出列-id explain输出列-select_type explain输出列-type explain输出列-possiable_keys、key explain输出列-key_len explain输出列-ref explain输出列-rows explain输出列-extra 参考博客 explain简介 explain和SQL语句一起使用的时候,MySQL将显示来自优化器的相关语句执行计划的信息,包括表的读取顺序、数据读取操作的操作类型、那些索引可以被使用、那些索引会被实际使用、表之间的引用、每张表大概需要读取多少行记录等等。通过这些我们能分析SQL语句的结构和性能瓶颈,从而优化我们的SQL语句。 example: explain输出列解释 字段 字段说明 字段值描述 id select查询序列号,包含一组数字,表示查询中执行select子句或者操作表的顺序 id相同 执行顺序由上至下 id不相同 如果是子查询,id的序号会递增,id的值越大被执行的优先级越高 id相同和不相同都存在 如果id相同可以认为是一组,同一组id执行顺序由上至下,不同组之间,id值越大被执行的优先级越高 select_type 查询的类型,主要用来区别普通查询,联合查询,子查询等复杂查询 SIMPLE

MySQL执行计划

荒凉一梦 提交于 2020-01-27 05:24:23
想了解mysql性能优化,首先要学会使用查看执行计划,执行计划主要用来查看SQL语句在数据库中的表现情况,通常用于SQL性能分析,SQL优化等 创建执行计划的语句有两种,如下所示 desc select * from table_test where table_test.id = 1; explain select * from table_test where table_test.id = 1; # desc 和 explain 两个关键字都可以用来查看SQL执行计划 压力测试准备 创建表: CREATE TABLE IF NOT EXISTS temp_100w( id int not null DEFAULT 0 COMMENT "学号", name VARCHAR(100) not null DEFAULT '未知' COMMENT "姓名", age TINYINT(10) not null DEFAULT 99 comment "年龄", sex ENUM('boy','girl','secret') DEFAULT 'secret' COMMENT '性别', create_time TIMESTAMP NOT NULL default NOW() comment '软删除标记' )engine=INNODB DEFAULT CHARSET utf8; #

C# 数据库并发的解决方案(通用版、EF版)

故事扮演 提交于 2020-01-27 04:21:38
十年河东,十年河西,莫欺少年穷。 EF就如同那个少年,ADO.NET则是一位壮年。毕竟ADO.NET出生在EF之前,而EF所走的路属于应用ADO.NET。 也就是说:你所写的LINQ查询,最后还是要转化为ADO.NET的SQL语句,转化过程中无形降低了EF的执行效率。 但是,使用EF的一个好处就是系统便于维护,减少了系统开发时间,降低了生成成本。 OK,上述只是做个简单的对比,那么在实际编码过程中,我们应当怎样提升EF的性能呢? 工欲善其事,必先利其器。 我们使用EF和在很大程度提高了开发速度,不过随之带来的是很多性能低下的写法和生成不太高效的sql。 虽然我们可以使用SQL Server Profiler来监控执行的sql,不过个人觉得实属麻烦,每次需要打开、过滤、清除、关闭。 在这里 强烈推荐一个插件MiniProfiler 。实时监控页面请求对应执行的sql语句、执行时间。简单、方便、针对性强。 如图: 关于MiniProfiler的使用,大家可参考: MiniProfiler工具介绍(监控加载用时,EF生成的SQL语句)--EF,迷你监控器,哈哈哈 1、EF使用SqlQuery 上述已经说的很明白了,EF效率低于ADO.NET是因为LINQ-TO-SQL的过程消耗了时间。而使用SqlQuery则可以直接写SQL语句。 当然,如果你想得到更快的执行速度

Window下MySQL安装配置

白昼怎懂夜的黑 提交于 2020-01-27 04:08:33
软件版本: mysql-essential-5.1.41-win32.msi (这个比较轻量,呵呵。) mysql-gui-tools-5.0-r17-win32.msi (一个图形工具) 1.安装 感觉界面很舒服啊。 “Next”,选择“Custom”,自定义,“Next”继续。 选择安装路径,配置安装内容,暂时不会用到C/C++的开发,所以没有选, 这里MySQLServer目录和My SQL Server Datafiles的目录不是父子同步更新的,MySQL Server是 程序文件的目录, MySQL Sever Datafiles是数据库的存放目录,可以分别配置。 确认安装信息如下: 安装完成后会询问时候立即配置数据库和注册,不注册好了,麻烦。开始配置,下一步: 安装完成。 2.MySQL配置。 启动配置界面如下: 第一个是详细配置,提供更优化的数据库,第二个是一般用途,提供通用的配置, 简单起见,选第二项“standard”,Next: 这个界面提供了是否把MySQL注册为服务,服务名称,是否自动启动等信息,是否把可执行文件放到 环境变量的选项等信息。我想他自动启动,所以把服务自动启动取消了, 但是为了方便,勾选了 Include Bin Directory In Windows PATH,这样使用命令控制的时候方便点。 这个步骤会给root用户创建密码

Mysql读写分离3

亡梦爱人 提交于 2020-01-27 03:32:24
主从复制 常用命令: service mysqld start 数据库启动 service iptables stop 数据库停止 mysql –u root 数据库登录 概念 影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。 MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。 在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。 日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】 日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。 可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。 【即便不考虑什么网络的因素

SQL Server定期自动备份

十年热恋 提交于 2020-01-27 01:13:10
SQL Server定期自动备份 企业管理器中的Tools,Database Maintenance Planner,可以设置数据库的定期自动备份计划。并通过启动Sql server Agent来自动运行备份计划。具体步骤如下: 1、打开企业管理器,在控制台根目录中依次点开Microsoft SQL Server-->SQL Server组-->双击打开你的服务器 2、然后点上面菜单中的工具-->选择数据库维护计划器 3、下一步选择要进行自动备份的数据-->下一步更新数据优化信息,这里一般不用做选择-->下一步检查数据完整性,也一般不选择 4、下一步指定数据库维护计划,默认的是1周备份一次,点击更改选择每天备份后点确定 5、下一步指定备份的磁盘目录,选择指定目录,如您可以在D盘新建一个目录如:d:\databak,然后在这里选择使用此目录,如果您的数据库比较多最好选择为每个数据库建立子目录,然后选择删除早于多少天前的备份,一般设定4-7天,这看您的具体备份要求,备份文件扩展名默认的是BAK 6、下一步指定事务日志备份计划,看您的需要做选择-->下一步要生成的报表,一般不做选择-->下一步维护计划历史记录,最好用默认的选项-->下一步完成 7、完成后系统很可能会提示Sql Server Agent服务未启动,先点确定完成计划设定,然后找到桌面最右边状态栏中的SQL绿色图标,双击点开

数据库

試著忘記壹切 提交于 2020-01-27 01:00:36
转自:https://blog.csdn.net/question_mark/article/details/103535100 JDBC 1、关于JDBC以下说法错误的是 A、DriverManager可以获取数据库连接 B、DataSource获取的数据库连接是可以重用的 C、DataSource获取的数据库连接也需要关闭物理连接 D、DataSource获取数据库连接也需要加载数据库驱动 2、下列说法错误的是 A、使用JDBC拥有更好的可移植性 B、JDBC制定了统一的数据库编程规范,需要由数据库厂商提供驱动包 C、JDBC也可以使用来连接NoSQL数据库,比如Redis D、JDBC也可以执行DDL指令 3、关于PreparedStatement与Statement描述错误的是 A、一般而言,PreparedStatement比Statement执行效率更高 B、PreparedStatement会预编译SQL语句 C、Statement每次都会解析/编译SQL,确立并优化数据获取路径 D、Statement执行扫描的结果集比PreparedStatement大 4、执行同构的SQL、执行异构的SQL和调用存储过程分别调用的接口是:【完美世界2020届校招笔试题】 A、PreparedStatement、Statement、CallableStatement B

数据库概念与实现(四)

若如初见. 提交于 2020-01-27 00:26:36
author:QYX 数据定义语言(DDL):提供定义关系模式,删除关系,修改关系模式的命令 数据操纵语言(DML):SQL DML提供从数据库中查询信息,插入元组,删除元组,修改元组的能力 完整性:DDL包括定义完整性约束的能力,保存在数据库的数据必须满足所定义的完整性约束。破坏完整性约束的更新是不允许存在的 视图:DDL包括定义视图的命令 事务控制:SQL包括定义事务开始和结束的命令 嵌入式SQL和动态SQL:嵌入式SQL和动态SQL定义SQL语句如何嵌入到通用编程语言中 授权:DDL包括定义对关系和视图访问权限的命令 DDL能定义每个关系的信息: 1 每个关系的模式 2 每个属性的取值类型 3 完整性约束 4 每个关系维护的索引集合 5 每个关系的安全性和权限信息 6 每个关系在磁盘上的物理存储结构 基本类型 SQL定义了多种固有的数据类型 char 固定长度的字符串 varchar 可变长度的字符串 int 整数类型 smallint 小整数类型 numeric(p,d) 定点数 这个数有p位数字(加上一个符号位),其中d位数字在小数点右边 real,double precision 浮点数与双精度浮点数,精度与机器相关 float(n) 精度至少为n位的浮点数 空值:缺失的值,该值可能存在但并不为人知,或者根本可能不存在,我们应该避免空值的使用