MySQL介绍和优化分享 2009-07.

Slides:



Advertisements
Similar presentations
第二章 简单的 SQL 语句. 本章要点  创建一个简单的表  SQL 语句介绍  最简单的查询语句 select  带有限制条件的查询  查询结果的排序显示.
Advertisements

作業一 : USING DBMS ( 使用 DB2 及 SQL 基本練習 ) 報告人:學生楊群期 學號: 課程 : 高等資料庫 講師 : 楊維邦教授.
MySQL 基础技能与原理 —— 基础技能 MySQL DBA Team 彭立勋( )
Data type P64 ‘’ 转义字符 P67 P68 EXE,选出某个教师的学生中最新的一 个,要姓名, ID (,LIMIT ) EXISTS,NOT EXISTS P409 Q,EXISTS 和 in 的区别( 1000 ,查询结果)
PHP 训练营 - MySQL OA 产品部 李鑫辉 2011 年 9 月. 内容提要 & 目录 1. 介绍 (10 分钟 ) 1.1. 简介 1.2. 特点 1.3. 安装 2. 语法 (60 分钟 ) 2.1. 存储引擎 MyISAM InnoDB 特点与区别.
高级服务器设计和实现 1 —— 基础与进阶 余锋
Chapter 3: SQL.
第5章 关系数据库标准语言SQL 主讲:张丽芳.
第2讲 Transact-SQL语言.
第5章 索引及视图操作 数据库原理应用与实践 SQL SERver2014(第2版) 主编 贾铁军 科学出版社 编著 陈国秦 万程 邢一鸣
数据库技术 实践.
WordPress 系统优化 优雅、稳定、快速 陈少钧 2007年9月1号北京.
第8章 SELECT敘述的基本查詢 8-1 SELECT查詢指令 8-2 SELECT子句 8-3 FROM子句 8-4 WHERE子句
第4章 关系数据库标准语言SQL 4.1 SQL语言概述 4.2 SQL数据查询功能 4.3 SQL数据操作功能 4.4 SQL数据定义功能.
(第11讲) Mysql 简介和创建新的数据库 本讲大纲: 1、MYSQL简介与概要 2、访问MYSQL的几种途径
数据库概述 简而言之,数据库(DataBase)就是一个存储数据的仓库。为了方便数据的存储和管理,它将数据按照特定的规律存储在磁盘上。通过数据库管理系统,可以有效的组织和管理存储在数据库中的数据。如今,已经存在了Oracle、SQL Server、MySQL等诸多优秀的数据库。在这一章中将讲解的内容包括。
MySQL資料庫安全管理.
第三章 数据类型和数据操作 对海量数据进行有效的处理、存储和管理 3.1 数据类型 数据源 数据量 数据结构
基于解释性语言的手机跨平台架构 Sloan Yi. Qt MTK.
课程名称 黄杉 讲师的CSDN博客地址:
在PHP和MYSQL中实现完美的中文显示
第十五章 常見的資料庫管理系統 目的 Oracle 微軟SQL Server 微軟Access MySQL Oracle 應用伺服器
第六章 學習SQL語言.
9 SELECT敘述的進階查詢 9-1 SQL的多資料表查詢 9-2 合併查詢 9-3 集合運算查詢 9-4 子查詢
Hadoop I/O By ShiChaojie.
MariaDB Spider分库分表引擎调研
第十一章 資料庫設計與權限設定.
Chapter 12 T-SQL 語法與 ASP.NET.
第3章 MySQL教學範本 主從式資料庫系統 - CH3.
MySQL数据库基础与实例教程 之 MySQL表结构的管理 郭水泉.
浅谈MySql索引及锁的应用 厦门大学数据库实验室 刘颖杰 2014年3月8日.
SQL Injection.
第11章:一些著名开源软件介绍 第12章:服务安装和配置 本章教学目标: 了解当前一些应用最广泛的开源软件项目 搭建一个网站服务器
大数据管理技术 --NoSQL数据库 HBase 陈 辉 大数据分析技术.
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
Ch4.SQL Server 2005資料庫組成員元件介紹
iRepor报表设计基础 IReport安装 普通实体报表 数据结果集报表 工作流主从报表 饼状图报表 柱状图,曲线图报表 条形码报表
SQL Injection (資料隱碼) 學生:a 吳倩瑜 指導教授:梁明章.
数据挖掘工具性能比较.
第20章 MySQL数据库.
MySQL开发规范 DB组-张浩.
第18章 SQL結構化查詢語言 18-1 SQL語言的基礎 18-2 SQL的查詢指令 18-3 SQL子查詢與合併查詢.
SQL 范引娣.
3. SQL语言的应用 3.1 SQL历史和优点 3.2 数据查询 3.3 数据操纵.
第12章 MySQL資料庫系統的使用 12-1 網頁資料庫的基礎 12-2 MySQL資料庫系統
SQL查询语句 蔡海洋.
VB与Access数据库的连接.
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
第三章 SQL Server数据管理.
第六類 資料庫備份與回復.
Web安全基础教程
ES 索引入门
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
iSIGHT 基本培训 使用 Excel的栅栏问题
学习目标 1、limit的作用 2、实例操作.
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Lesson 4 :基礎應用一(計數器) (2005/01/27).
Visual Basic程序设计 第13章 访问数据库
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
第9章 多媒体技术 掌握 Windows 画图工具的基本操作; 掌握 Windows 音频工具进行音频播放;
第四組 停車場搜尋系統 第四組 溫允中 陳欣暉 蕭積遠 李雅俐.
第六章 Excel的应用 五、EXCEL的数据库功能 1、Excel的数据库及其结构 2、Excel下的数据排序 (1)Excel的字段名行
基于列存储的RDF数据管理 朱敏
VB与Access数据库的连接.
MySQL执行计划解读 胡中泉.
WEB程序设计技术 数据库操作.
資料庫應用與實作 一到六章重點、習題.
第4章 数据查询.
学习目标 1、什么是列类型 2、列类型之数值类型.
百万行、千万行数据查询教程 老黄牛.
Presentation transcript:

MySQL介绍和优化分享 2009-07

目录索引 MySQL基本介绍 MySQL优化方式 MySQL技巧分享 Q & A

MySQL基本介绍

什么是MySQL   MySQL是一个小型关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 MySQL官方网站:http://www.mysql.com

谁在用MySQL

MySQL历史 1979年, 报表工具,数据引擎 1996年,MySQL 1.0 (3.11.1) 发布,支持SQL 2000年,成立 MySQL AB 公司 2008年1月,Sun公司以10亿美元收购MySQL AB公司 2009年4月,Oracle公司以74亿美元收购Sun公司

MySQL里程碑 3.11.1 First public release 3.23 集成Berkeley DB, 支持事务,抽象出Storage Engine 4.0 集成InnoDB 4.1 重大改进,子查询、unicode、c/s通信协议 5.0 stored procedure、view、triggers、query optimizer 5.1 File NDB、record replication......

MySQL架构

MySQL存储引擎比较

MyISAM vs InnoDB MyISAM 特点 数据存储方式简单,使用 B+ Tree 进行索引 使用三个文件定义一个表:.MYI .MYD .frm 少碎片、支持大文件、能够进行索引压缩 二进制层次的文件可以移植 (Linux  Windows) 访问速度飞快,是所有MySQL文件引擎中速度最快的 不支持一些数据库特性,比如 事务、外键约束等 Table level lock,性能稍差,更适合读取多的操作 表数据容量有限,一般建议单表数据量介于 50w–200w 增删查改以后要使用 myisamchk 检查优化表

MyISAM vs InnoDB MyISAM 存储结构

MyISAM vs InnoDB MyISAM 索引结构

MyISAM vs InnoDB InnoDB 特点 使用 Table Space 的方式来进行数据存储 (ibdata1, ib_logfile0) 支持 事务、外键约束等数据库特性 Rows level lock , 读写性能都非常优秀 能够承载大数据量的存储和访问 拥有自己独立的缓冲池,能够缓存数据和索引 在关闭自动提交的情况下,与MyISAM引擎速度差异不大

MyISAM vs InnoDB InnoDB 数据结构

MyISAM vs InnoDB 性能测试 数据量/单位:万 MyISAM InnoDB 插入:1w 3秒 219秒 插入:10w 29 秒 备注: my.cnf 特殊选项 插入:1w 3秒 219秒 innodb_flush_log_at_trx_commit=1 插入:10w 29 秒 2092秒 插入:100w 287秒 N/A innodb_flush_log_at_trx_commit=0 30秒 29秒 273秒 423秒 innodb_flush_log_at_trx_commit=0 innodb_buffer_pool_size=256M 插入:10W 26秒 插入:100W 379秒 innodb_flush_log_at_trx_commit=0 innodb_buffer_pool_size=256M

MyISAM vs InnoDB 性能测试 测试结果 可以看出在MySQL 5.0里面,MyISAM和InnoDB存储引擎性能差别并不是很大,针对InnoDB来说,影响性能的主要是 innodb_flush_log_at_trx_commit 这个选项,如果设置为1的话,那么每次插入数据的时候都会自动提交,导致性能急剧下降,应该是跟刷新日志有关系,设置为0效率能够看到明显提升,当然,同样你可以SQL中提交“SET AUTOCOMMIT = 0”来设置达到好的性能。 同时也可以看出值得使用 InnoDB 来替代 MyISAM 引擎来进行开发,毕竟InnoDB 有多数据库特性、更良好的数据存储性能和查询性能

MySQL优化方式

MySQL优化方式 系统优化:硬件、架构 服务优化 应用优化

系统优化 使用好的硬件,更快的硬盘、大内存、多核CPU,专业的存储服务器(NAS、SAN) 设计合理架构,如果 MySQL 访问频繁,考虑 Master/Slave 读写分离;数据库分表、数据库切片(分布式),也考虑使用相应缓存服务帮助 MySQL 缓解访问压力

服务优化 MySQL配置原则 配置合理的MySQL服务器,尽量在应用本身达到一个MySQL最合理的使用 针对 MyISAM 或 InnoDB 不同引擎进行不同定制性配置 针对不同的应用情况进行合理配置 针对 my.cnf 进行配置,后面设置是针对内存为2G的服务器进行的合理设置

服务优化 公共选项 选项 缺省值 推荐值 说明 max_connections 100 1024 query_cache_size MySQL服务器同时处理的数据库连接的最大数量 query_cache_size 0 (不打开) 16M 查询缓存区的最大长度,按照当前需求,一倍一倍增加,本选项比较重要 sort_buffer_size 512K 每个线程的排序缓存大小,一般按照内存可以设置为2M以上,推荐是16M,该选项对排序order by,group by起作用 record_buffer 128K 每个进行一个顺序扫描的线程为其扫描的每张表分配这个大小的一个缓冲区,可以设置为2M以上 table_cache 64 512 为所有线程打开表的数量。增加该值能增加mysqld要求的文件描述符的数量。MySQL对每个唯一打开的表需要2个文件描述符。

服务优化 MyISAM 选项 选项 缺省值 推荐值 说明 key_buffer_size 8M 256M read_buffer_size myisam_sort_buffer_size 128M 设置,恢复,修改表的时候使用的缓冲大小,值不要设的太大

服务优化 InnoDB 选项 选项 缺省值 推荐值 说明 innodb_buffer_pool_size 32M 1G InnoDB使用一个缓冲池来保存索引和原始数据, 这里你设置越大,你在存取表里面数据时所需要的磁盘I/O越少,一般是内存的一半,不超过2G,否则系统会崩溃,这个参数非常重要 innodb_additional_mem_pool_size 2M 128M InnoDB用来保存 metadata 信息, 如果内存是4G,最好本值超过200M innodb_flush_log_at_trx_commit 1 0 代表日志只大约每秒写入日志文件并且日志文件刷新到磁盘; 1 为执行完没执行一条SQL马上commit; 2 代表日志写入日志文件在每次提交后,但是日志文件只有大约每秒才会刷新到磁盘上. 对速度影响比较大,同时也关系数据完整性 innodb_log_file_size 8M 256M 在日志组中每个日志文件的大小, 一般是innodb_buffer_pool_size的25%,官方推荐是 innodb_buffer_pool_size 的 40-50%, 设置大一点来避免在日志文件覆写上不必要的缓冲池刷新行为 innodb_log_buffer_size 128K 用来缓冲日志数据的缓冲区的大小. 推荐是8M,官方推荐该值小于16M,最好是 1M-8M 之间

应用优化 应用优化方式 设计合理的数据表结构:适当的数据冗余 对数据表建立合适有效的数据库索引 数据查询:编写简洁高效的SQL语句

应用优化 表结构设计原则 选择合适的数据类型:如果能够定长尽量定长 不要使用无法加索引的类型作为关键字段,比如 text类型 为了避免联表查询,有时候可以适当的数据冗余,比如 邮箱、姓名这些不容易更改的数据 选择合适的表引擎,有时候 MyISAM 适合,有时候 InnoDB适合 为保证查询性能,最好每个表都建立有 auto_increment 字段, 建立合适的数据库索引 最好给每个字段都设定 default 值

应用优化 索引建立原则 一般针对数据分散的关键字进行建立索引,比如ID、QQ, 像性别、状态值等等建立索引没有意义 尽量使用短索引,一般对int、char/varchar、date/time 等 类型的字段建立索引 需要的时候建立联合索引,但是要注意查询SQL语句的编写 谨慎建立 unique 类型的索引(唯一索引) 一般建议每条记录最好有一个能快速定位的独一无二定位的 唯一标示(索引) 不要过度索引,单表建立的索引不要超过5个,否则更新索 引将很耗时

应用优化 编写高效的 SQL 能够快速缩小结果集的 WHERE 条件写在前面,如果有恒量条件, 也尽量放在前面 尽量避免使用 GROUP BY、DISTINCT 、OR、IN 等语句的使用, 避免使用联表查询和子查询,因为将使执行效率大大下降 能够使用索引的字段尽量进行有效的合理排列,如果使用了 联合索引,请注意提取字段的前后顺序 针对索引字段使用 >, >=, =, <, <=, IF NULL和BETWEEN 将会使用 索引, 如果对某个索引字段进行 LIKE 查询,使用 LIKE ‘%abc%’ 不能使用索引,使用 LIKE ‘abc%’ 将能够使用索引 如果在SQL里使用了MySQL部分自带函数,索引将失效,同时将无法 使用 MySQL 的 Query Cache,比如 LEFT(), SUBSTR(), TO_DAYS() DATE_FORMAT(), 等,如果使用了 OR 或 IN,索引也将失效 使用 Explain 语句来帮助改进我们的SQL语句

MySQL技巧分享

MySQL技巧分享 常用技巧 使用 Explain/ DESC 来分析SQL的执行情况 使用 SHOW PROCESSLIST 来查看当前MySQL服务器线程 执行情况,是否锁表,查看相应的SQL语句 设置 my.cnf 中的 long-query-time 和 log-slow-queries 能够 记录服务器那些SQL执行速度比较慢 另外有用的几个查询:SHOW VARIABLES、SHOW STATUS、SHOW ENGINES 使用 DESC TABLE xxx 来查看表结构,使用 SHOW INDEX FROM xxx 来查看表索引 使用 LOAD DATA 导入数据比 INSERT INTO 快多了 SELECT COUNT(*) FROM Tbl 在 InnoDB 中将会扫描全表 MyISAM 中则效率很高

MySQL 技巧分享 Explain 使用 语法:EXPLAIN SELECT select_options Type: 类型,是否使用了索引还是全表扫描, const,eg_reg,ref,range,index,ALL Key: 实际使用上的索引是哪个字段 Ken_len: 真正使用了哪些索引,不为 NULL 的就是真实使用的索引 Ref: 显示了哪些字段或者常量被用来和 key 配合从表中查询记录出来 Rows: 显示了MySQL认为在查询中应该检索的记录数 Extra: 显示了查询中MySQL的附加信息,关心Using filesort 和 Using temporary,性能杀手

MySQL 技巧分享 索引实践

MySQL 技巧分享 函数和索引

MySQL 技巧分享 使用 UNION 来取代 IN 和 OR 原SQL: select * from city where id in (1,3,4) 或 select * from city where id = 1 or id = 3 or id = 4 explain 结果: id select_type table type possible_keys key key_len ref rows Extra 1   SIMPLE  city ALL  PRIMARY  NULL NULL  NULL 5  Using where 修改后SQL: SELECT * FROM city where id = 1 UNION ALL SELECT * FROM city where id = 3 UNION ALL SELECT * FROM city explain 结果: id   select_type table        type possible_keys key      key_len ref   rows Extra 1    PRIMARY      city         const PRIMARY       PRIMARY 4       const 1   2    UNION        city         const PRIMARY       PRIMARY 4       const 1   3    UNION        city         const PRIMARY       PRIMARY 4       const 1   NULL UNION RESULT <union1,2,3> ALL   NULL          NULL     NULL    NULL NULL  

MySQL 技巧分享 MySQL Slow Log 分析工具 mysqldumpslow - mysql官方提供的慢查询日志分析工具 mysqlsla - hackmysql.com推出的一款日志分析工具,功能 非常强大 mysql-explain-slow-log – 德国工程师使用Perl开发的把Slow Log 输出到屏幕,功能简单 mysql-log-filter - Google code 上一个开源产品,报表简洁 myprofi - 纯PHP开发的开源log查看工具,功能详细

MySQL 技巧分享 MySQL优化网站/书籍分享 MySQL Performance Blog MySQL 中文网

Q & A

结束 谢谢大家!