sql优化

蛙蛙推荐:蛙蛙教你配置linux+mysql+.net环境

﹥>﹥吖頭↗ 提交于 2020-02-24 09:01:56
摘要:.net一般配合sqlserver使用,但mysql在性能和成本上也很有优势,本文介绍如何搭建一个mysql服务器,以及演示如何用.net使用mysql数据库。 一、安装linux 一般PHP环境的最佳组合是LAMP(linux+apache+mysql+php),说明mysql在linux下是最合适的,所以我们先装linux,因为我们在linux下只运行mysql服务,所以选择一个没有x-window的发行版本就行了,最终选择了unbuntu系列的jeos,目前(2008-12-25)最新版本是8.04.1,下载地址如下。 http://cdimage.ubuntu.com/jeos/releases/8.04/release/ jeos是Just enough Operation System的简写,只是一个linux内核加一些主要的控制台工具,没有窗口界面,甚至连telnet和ftp服务也没有,但我们要管理服务器和传文件,必须得装这两个服务。 下载了jeos后,再装一个虚拟机,vpc肯定不行,只能选择ms的操作系统,据说有人选了other装jeos也启动不起来,所以大家不要试了。vmware 5.x有绿色版,大家也不要试了,我试了两宿,装了N遍,死活启不来,那就用vmware6.5版,新建虚拟机的时候选择自定义,然后硬盘选择IDE

【0.4】mysql版本特性(5.6-8.0)【转】

让人想犯罪 __ 提交于 2020-02-24 05:54:25
转自: http://blog.itpub.net/15498/viewspace-2650661/ MySQL 5.6 1).支持GTID复制 2).支持无损复制 3).支持延迟复制 4).支持基于库级别的并行复制 5).mysqlbinlog命令支持远程备份binlog 6).对TIME, DATETIME和TIMESTAMP进行了重构,可支持小数秒。DATETIME的空间需求也从之前的8个字节减少到 5个字节 7).支持Online DDL。ALTER操作不再阻塞DML。 8).支持可传输表空间(transportable tablespaces) 9).支持统计信息的持久化。避免主从之间或数据库重启后,同一个SQL的执行计划有差异 10).支持支持全文索引 11).支持InnoDB Memcached plugin 12).EXPLAIN可用来查看DELETE,INSERT,REPLACE,UPDATE等DML操作的执行计划,在此之前,只支持SELECT操作 13).分区表的增强,包括最大可用分区数增加至8192,支持分区和非分区表之间的数据交换,操作时显式指定分区 14).Redo Log总大小的限制从之前的4G扩展至512G 15).Undo Log可保存在独立表空间中,因其是随机IO,更适合放到SSD中。但仍然不支持空间的自动回收 16)

MySQL 5.6, 5.7, 8.0的新特性

时间秒杀一切 提交于 2020-02-24 05:52:28
MySQL 5.6, 5.7, 8.0的新特性 对于MySQL的历史,相信很多人早已耳熟能详,这里就不要赘述。下面仅从产品特性的角度梳理其发展过程中的里程碑事件。 1995年,MySQL 1.0发布,仅供内部使用。 1996年,MySQL 3.11.1发布,直接跳过了MySQL 2.x版本。 1999年,MySQL AB公司成立。同年,发布MySQL 3.23,该版本集成了Berkeley DB存储引擎。该引擎由Sleepycat公司开发,支持事务。在集成该引擎的过程中,对源码进行了改造,为后续可插拔式存储引擎架构奠定了基础。 2000年,ISAM升级为MyISAM存储引擎。同年,MySQL基于GPL协议开放源码。 2002年,MySQL 4.0发布,集成了后来大名鼎鼎的InnoDB存储引擎。该引擎由Innobase公司开发,支持事务,支持行级锁,适用于OLTP等高并发场景。 2005年,MySQL 5.0发布,开始支持游标,存储过程,触发器,视图,XA事务等特性。同年,Oracle收购Innobase公司。 2008年,Sun以10亿美金收购MySQL AB。同年,发布MySQL 5.1,其开始支持定时器(Event scheduler),分区,基于行的复制等特性。 2009年,Oracle以74亿美金收购Sun公司。 2010年, MySQL 5.5 发布

Mysql死锁原理分析

纵然是瞬间 提交于 2020-02-23 19:29:24
文章来自何凳成博客 1 背景 MySQL/InnoDB 的加锁分析,一直是一个比较困难的话题。我在工作过程中,经常会有同事 咨询这方面的问题。同时,微博上也经常会收到MySQL 锁相关的私信,让我帮助解决一些 死锁的问题。本文,准备就MySQL/InnoDB 的加锁问题,展开较为深入的分析与讨论,主要 是介绍一种思路,运用此思路,拿到任何一条SQL 语句,就能完整的分析出这条语句会加 什么锁?会有什么样的使用风险?甚至是分析线上的一个死锁场景,了解死锁产生的原因。 注 :MySQL 是一个支持插件式存储引擎的数据库系统。本文下面的所有介绍,都是基于InnoDB 存储引擎,其他引擎的表现,会有较大的区别。 1.1 MVCC:Snapshot Read vs Current Read MySQL InnoDB 存储引擎,实现的是基于多版本的并发控制协议——MVCC (Multi-Version Concurrency Control) (注:与MVCC相对的,是基于锁的并发控制,Lock-Based ConcurrencyControl)。MVCC 最大的好处,相信也是耳熟能详:读不加锁,读写不冲突。在读多些少的OLTP 应用中,读写不冲突是非常重要的,极大的增加了系统的并发性能,这也是为什么现阶段,几乎所有的 RDBMS,都支持了 MVCC。 在 MVCC 并发控制中

30种SQL语句优化

守給你的承諾、 提交于 2020-02-23 14:20:55
01 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 02 应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 03 应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0 04 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10union allselect id from t where num=20 05 下面的查询也将导致全表扫描: select id from t where name like '%abc%' 若要提高效率,可以考虑全文检索。 06 in 和 not in 也要慎用,否则会导致全表扫描,如: select id from t where num in(1,2,3) 对于连续的数值,能用

MyBatis和Hibernate相比较

若如初见. 提交于 2020-02-23 07:30:50
作者:乌拉拉 链接:http://www.zhihu.com/question/21104468/answer/58579295 1、开发对比开发速度 Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 开发社区 Hibernate 与Mybatis都是流行的持久层开发框架,但Hibernate开发社区相对多热闹些,支持的工具也多,更新也快,当前最高版本4.1.8。而Mybatis相对平静,工具较少,当前最高版本3.2。 开发工作量 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。 针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 2、系统调优对比Hibernate的调优方案 制定合理的缓存策略; 尽量使用延迟加载特性; 采用合理的Session管理机制; 使用批量抓取,设定合理的批处理参数(batch_size); 进行合理的O/R映射设计 Mybatis调优方案 MyBatis在Session方面和Hibernate的Session生命周期是一致的,同样需要合理的Session管理机制

mybatis和hibernate的特点

本秂侑毒 提交于 2020-02-23 07:28:59
第一方面:开发速度的对比 就开发速度而言,Hibernate的真正掌握要比Mybatis来得难些。Mybatis框架相对简单很容易上手,但也相对简陋些。个人觉得要用好Mybatis还是首先要先理解好Hibernate。 比起两者的开发速度,不仅仅要考虑到两者的特性及性能,更要根据项目需求去考虑究竟哪一个更适合项目开发,比如:一个项目中用到的复杂查询基本没有,就是简单的增删改查,这样选择hibernate效率就很快了,因为基本的sql语句已经被封装好了,根本不需要你去写sql语句,这就节省了大量的时间,但是对于一个大型项目,复杂语句较多,这样再去选择hibernate就不是一个太好的选择,选择 mybatis 就会加快许多,而且语句的管理也比较方便。 第二方面:开发工作量的对比 Hibernate和MyBatis都有相应的代码生成工具。可以生成简单基本的DAO层方法。针对高级查询,Mybatis需要手动编写SQL语句,以及ResultMap。而Hibernate有良好的映射机制,开发者无需关心SQL的生成与结果映射,可以更专注于业务流程。 第三方面:sql优化方面 Hibernate的查询会将表中的所有字段查询出来,这一点会有性能消耗。Hibernate也可以自己写SQL来指定需要查询的字段,但这样就破坏了Hibernate开发的简洁性。而Mybatis的SQL是手动编写的

05.MySQL的架构和历史--MySQL逻辑架构

自古美人都是妖i 提交于 2020-02-22 17:09:19
一.mysql的独特之处 mysql的不同之处在于能够在不同的场景中应用并发挥好作用,带来选择上的困难。但是足够灵活,能够适应高要求的的环境,例如web的类应用。通过配置可以适应不同的硬件,可以支持不同的数据类型。而最最重要、最与众不同的是他的存储引擎架构,这种架构的设计将 查询处理、系统任务、数据的存储/提取相分离,这样使用的时候可以根据性能,特性,以及其他需求来选择数据存储的方式。 二.逻辑架构图 三.连接管理和安全 服务器缓存连接的线程,并对客户端登陆用户进行验证,登陆成功后验证其用户权限(innoDB是例外可以解析外键定义,因为mysql服务器没有实现该功能) 四.优化与执行 Mysql会解析查询,并创建内部数据结构(解析树),然后对其进行优化,包括重写查询,决定表的读取顺序,以及选择合适的索引。用户可以通过特殊的关键字来提示优化器,影响它的决策过程。也可以请求优化器的解释优化过程的各个因素,是用户可以知道 服务器是如何进行优化决策的,并提供一个参考基准,便于用户重构查询和schema.优化器不关心是什么样的存储引擎,但是存储引擎对于优化查询是有影响的。优化器会请求存储引擎提供容量或者某个具体操作的开销信息,以及表数据的统计信息等。例如,某些存储引擎的某些特定的索引,可能对于一些特定的查询有优化。 对于select语句,在解析查询之前,服务器会先检查查询缓存

记一次MySql优化问题

走远了吗. 提交于 2020-02-21 22:26:24
一、背景 此次查询涉及三个大表的联合查询,即: x_location_t, x_account_t, x_application_t ,每张表的记录大概200万条记录,现在需求是联合查询三个表的记录筛选出用户所需要的条件,原始的sql查询语句如下: select al.id, ln.application_id, al.user_account, case al.user_type when 'w3' then "内部用户" when 'others' then '外部用户' end as user_type, al.country_code, al.country_name, al.ip_address, al.province, al.city, al.detail_address, al.earliest_time, al.latest_time, al.create_by, al.create_time, al.update_by, al.update_time, al.source, case al.source when '1' then "userProfile" when '2' then 'IPNET' end as source_desc, a.code appCode, a.name appName from x_location_t al JOIN x

explain SQL语句()

ぐ巨炮叔叔 提交于 2020-02-21 19:42:14
坊间有传言:MySQL性能优化有个神器,叫做explain,它可以对select语句进行分析并且输出详细的select执行过程的详细信息,让开发者从这些信息中获得优化的思路。 下面来讲讲这个MySQL提供的explain命令: 语法:explain SQL语句 例如: 1explain select * from user where id=1 执行完毕之后,它的输出有以下字段: id select_type table partitions type possible_keys key key_len ref rows Extra 要想知道explain命名怎么使用,就必须把这些字段搞清楚 1. id SELECT查询的标识符, 每个SELECT语句都会自动分配一个唯一的标识符 2. select_type 每个select查询字句的类型,具体类型以及对应作用如下表: 类型名 解释 SIMPLE 简单SELECT,不使用UNION或子查询等 PRIMARY 查询中若包含任何复杂的子部分,最外层的select被标记为PRIMARY UNION UNION中的第二个或后面的SELECT语句 DEPENDENT UNION UNION中的第二个或后面的SELECT语句,取决于外面的查询 UNION RESULT UNION的结果 SUBQUERY 子查询中的第一个SELECT