MySQL优化自学手册
MySQL调优技术分享PPT

多表查询优化建议
二、连接和子查询的比较 开发效率:子查询将一个SQL拆分成多个SQL进行查询,连接查询只查询一个SQL,把业务逻辑放到
SQL中,提高了开发效率。 查询效率: (子查询优于关联查询):联合查询相较于单查询减少了通信次数,降低了通讯上时间的消耗;
由于数据库存在缓存机制,所以开启MYSQL查询的话,单查询的可重用性较高,缓存效率比联合查询也 会更高。
多表查询优化建议
一、连接(关联查询): 基础介绍: 1、内连接:两个表中同时满足某条件的数据记录组合,两个表的交集;关键词 inner join 或 join 2、外连接:(左外连接和右外连接还有全连接) ①:左外连接:A的全集以及A和B的交集;关键词:left join ②:右外连接:B的全集以及A和B的交集;关键词:right join ③:全连接:A与B的并集。 ④:交叉连接:A与B的笛卡尔乘积。关键词:cross join 内部实现原理: 嵌套循环关联,先确定一端,再进行匹配。
04
拓展
MYSQL缓存机制
一、MYSQL缓存机制
原理:MySQL的Query_Cache:将查询语句和返回的结果集使用KV形式存在内存中;当发起一个 查询请求,先对该SQL进行权限验证,接着就通过Query Cache来查找结果。它不需要经过Optimizer模块 进行执行计划的分析优化,更不需要发生同任何存储引擎的交互,减少了大量的磁盘IO和CPU运算,所以 有时候效率非常高。
索引下推
2020
演示完毕 感谢观看
锁竞争:联合查询查询速度比单个查询要慢,所以联合查询会增加锁的竞争关系。 (关联查询优于子查询):MYSQL查询优化器更好读懂关联查询,所以更快预算出更好的查询
路径。
《MySQL数据库实用教程》电子教案

《MySQL数据库实用教程》电子教案第一章:MySQL数据库简介1.1 课程目标了解MySQL数据库的历史和发展掌握MySQL数据库的特点和应用场景了解MySQL数据库的安装和配置1.2 教学内容MySQL数据库的历史和发展MySQL数据库的特点和优势MySQL数据库的应用场景MySQL数据库的安装和配置步骤1.3 教学方法讲授:讲解MySQL数据库的历史、特点和应用场景演示:展示MySQL数据库的安装和配置过程互动:回答学生提出的问题1.4 课后作业了解并总结其他数据库的特点和应用场景完成MySQL数据库的安装和配置第二章:MySQL数据库的基本操作2.1 课程目标掌握MySQL数据库的创建、删除和使用掌握MySQL数据库表的创建、删除和修改掌握MySQL数据库表中数据的插入、查询和修改2.2 教学内容MySQL数据库的创建、删除和使用MySQL数据库表的创建、删除和修改MySQL数据库表中数据的插入、查询和修改2.3 教学方法讲授:讲解MySQL数据库的创建、删除和使用方法演示:展示MySQL数据库表的创建、删除和修改过程互动:回答学生提出的问题2.4 课后作业练习创建、删除和使用MySQL数据库练习创建、删除和修改MySQL数据库表练习插入、查询和修改MySQL数据库表中的数据第三章:MySQL数据库的进阶操作3.1 课程目标掌握MySQL数据库的备份和恢复掌握MySQL数据库的安全管理掌握MySQL数据库的性能优化3.2 教学内容MySQL数据库的备份和恢复MySQL数据库的安全管理MySQL数据库的性能优化3.3 教学方法讲授:讲解MySQL数据库的备份和恢复方法演示:展示MySQL数据库的安全管理和性能优化技巧互动:回答学生提出的问题3.4 课后作业练习备份和恢复MySQL数据库学习并了解MySQL数据库的安全管理方法学习并了解MySQL数据库的性能优化技巧第四章:MySQL数据库的编程应用4.1 课程目标掌握MySQL数据库的存储过程和触发器掌握MySQL数据库的视图和索引掌握MySQL数据库的存储引擎4.2 教学内容MySQL数据库的存储过程和触发器MySQL数据库的视图和索引MySQL数据库的存储引擎4.3 教学方法讲授:讲解MySQL数据库的存储过程、触发器、视图、索引和存储引擎的概念和使用方法演示:展示MySQL数据库的存储过程、触发器、视图、索引和存储引擎的实际应用示例互动:回答学生提出的问题4.4 课后作业练习创建和调用MySQL数据库的存储过程和触发器练习创建和使用MySQL数据库的视图和索引学习并了解MySQL数据库的存储引擎的选择和配置方法第五章:MySQL数据库的实战应用5.1 课程目标掌握使用MySQL数据库进行网站数据管理的方法掌握使用MySQL数据库进行大数据处理的方法掌握MySQL数据库的分布式应用和集群管理5.2 教学内容使用MySQL数据库进行网站数据管理使用MySQL数据库进行大数据处理MySQL数据库的分布式应用和集群管理5.3 教学方法讲授:讲解使用MySQL数据库进行网站数据管理和大数据处理的方法演示:展示MySQL数据库的分布式应用和集群管理的实际应用示例互动:回答学生提出的问题5.4 课后作业练习使用MySQL数据库进行网站数据管理学习并了解使用MySQL数据库进行大数据处理的方法学习并了解MySQL数据库的分布式应用和集群管理的配置和部署方法第六章:使用SQL语句操作MySQL数据库6.1 课程目标掌握SQL语句的基本结构和使用方法掌握使用SQL语句创建、删除和修改数据库表掌握使用SQL语句插入、查询和修改数据6.2 教学内容SQL语句的基本结构使用SQL语句创建、删除和修改数据库表使用SQL语句插入、查询和修改数据6.3 教学方法讲授:讲解SQL语句的基本结构和使用方法演示:展示使用SQL语句创建、删除和修改数据库表以及插入、查询和修改数据的过程互动:回答学生提出的问题6.4 课后作业练习编写SQL语句创建、删除和修改数据库表练习编写SQL语句插入、查询和修改数据第七章:MySQL数据库的备份与恢复7.1 课程目标掌握MySQL数据库的备份方法掌握MySQL数据库的恢复方法掌握MySQL数据库的还原方法7.2 教学内容MySQL数据库的备份方法MySQL数据库的恢复方法MySQL数据库的还原方法7.3 教学方法讲授:讲解MySQL数据库的备份、恢复和还原方法演示:展示MySQL数据库的备份、恢复和还原的实际操作过程互动:回答学生提出的问题7.4 课后作业练习使用MySQL数据库的备份方法进行数据备份练习使用MySQL数据库的恢复方法进行数据恢复练习使用MySQL数据库的还原方法进行数据还原第八章:MySQL数据库的安全管理8.1 课程目标掌握MySQL数据库的安全管理概念掌握用户权限管理方法掌握SQL注入防护方法8.2 教学内容MySQL数据库的安全管理概念用户权限管理方法SQL注入防护方法8.3 教学方法讲授:讲解MySQL数据库的安全管理概念、用户权限管理方法和SQL注入防护方法演示:展示MySQL数据库的用户权限管理和SQL注入防护的实际操作过程互动:回答学生提出的问题8.4 课后作业练习使用用户权限管理方法设置用户权限学习并了解SQL注入防护方法第九章:MySQL数据库的性能优化9.1 课程目标掌握MySQL数据库的性能优化方法掌握索引优化方法掌握查询优化方法9.2 教学内容MySQL数据库的性能优化方法索引优化方法查询优化方法9.3 教学方法讲授:讲解MySQL数据库的性能优化方法、索引优化方法和查询优化方法演示:展示MySQL数据库的索引优化和查询优化的实际操作过程互动:回答学生提出的问题9.4 课后作业练习使用索引优化方法优化数据库索引练习使用查询优化方法优化数据库查询第十章:MySQL数据库的实战应用案例分析10.1 课程目标学习MySQL数据库在实际项目中的应用案例分析MySQL数据库在实战中的性能优化方法掌握MySQL数据库在实战中的安全防护措施10.2 教学内容MySQL数据库在实际项目中的应用案例MySQL数据库在实战中的性能优化方法MySQL数据库在实战中的安全防护措施10.3 教学方法讲授:讲解MySQL数据库在实际项目中的应用案例和实战中的性能优化方法、安全防护措施演示:展示MySQL数据库在实战中的应用案例和性能优化、安全防护的实际操作过程互动:回答学生提出的问题10.4 课后作业学习并分析MySQL数据库在实际项目中的应用案例学习并了解MySQL数据库在实战中的性能优化方法和安全防护措施重点解析本文主要介绍了《MySQL数据库实用教程》电子教案,共包含十个章节。
mysql8 参考手册

mysql8 参考手册
《MySQL 8 参考手册》是一套详细介绍MySQL 8 最新版功能的中文文档,其中包含了官方最新版英文文档,方便用户学习和查询。
手册中详细介绍了MySQL 的使用方法、查询方法、函数、ODBC 等方面的内容,为用户提供了全面的 MySQL 8 知识和技术支持。
该手册涵盖了 MySQL 8 的各个方面,包括 SQL 语句、数据类型、索引、
视图、存储过程、触发器等,以及 MySQL 8 的新特性,如窗口函数、JSON 支持、数据字典等。
用户可以按照章节和知识点,逐步学习 MySQL
8 的各项功能和操作,掌握数据库管理的最佳实践和技巧。
此外,该手册还提供了丰富的示例和案例,帮助用户更好地理解和应用所学知识。
同时,手册中还包含了 MySQL 8 的性能优化、安全设置等方面的内容,为用户在实际应用中提供了实用的指导。
总之,《MySQL 8 参考手册》是一本全面介绍 MySQL 8 的书籍,适合数
据库管理员、开发人员以及需要了解和使用 MySQL 的用户阅读和使用。
MySQL中文参考手册MySQL学习总结-MySQL-API函数描述

MySQL函数描述、学习总结(适用版本:MySQL 3.23.7alpla)1. MySQL API (2)1.1. MySQL C API (2)1.2. C API数据类型 (3)1.3. C API函数概述 (6)1.4. C API函数描述 (9)1.4.1. mysql_affected_rows() (10)1.4.2. mysql_close() (11)1.4.3. mysql_connect() (11)1.4.4. mysql_change_user() (12)1.4.5. mysql_create_db() (13)1.4.6. mysql_data_seek() (14)1.4.7. mysql_debug() (15)1.4.8. mysql_drop_db() (15)1.4.9. mysql_dump_debug_info() (16)1.4.10. mysql_eof() (17)1.4.11. mysql_errno() (18)1.4.12. mysql_error() (19)1.4.13. mysql_escape_string() (20)1.4.14. mysql_fetch_field() (21)1.4.15. mysql_fetch_fields() (22)1.4.16. mysql_fetch_field_direct() (23)1.4.17. mysql_fetch_lengths() (23)1.4.18. mysql_fetch_row() (24)1.4.19. mysql_field_count() (26)1.4.20. mysql_field_seek() (27)1.4.21. mysql_field_tell() (28)1.4.22. mysql_free_result() (28)1.4.23. mysql_get_client_info() (29)1.4.24. mysql_get_host_info() (29)1.4.25. mysql_get_proto_info() (30)1.4.26. mysql_get_server_info() (30)1.4.27. mysql_info() (30)1.4.28. mysql_init() (31)1.4.29. mysql_insert_id() (32)1.4.30. mysql_kill() (32)1.4.31. mysql_list_dbs() (33)1.4.32. mysql_list_fields() (34)1.4.33. mysql_list_processes() (35)1.4.34. mysql_list_tables() (35)1.4.35. mysql_num_fields() (36)1.4.36. mysql_num_rows() (38)1.4.37. mysql_options() (38)1.4.38. mysql_ping() (40)1.4.39. mysql_query() (41)1.4.40. mysql_real_connect() (41)1.4.41. mysql_real_query() (43)1.4.42. mysql_reload() (44)1.4.43. mysql_row_seek() (45)1.4.44. mysql_row_tell() (45)1.4.45. mysql_select_db() (46)1.4.46. mysql_shutdown() (47)1.4.47. mysql_stat() (47)1.4.48. mysql_store_result() (48)1.4.49. mysql_thread_id() (49)1.4.50. mysql_use_result() (50)1.4.51. 为什么在mysql_query()返回成功后,mysql_store_result()有时返回NULL? (51)1.4.52. 我能从查询中得到什么结果? (51)1.4.53. 我怎样能得到最后插入的行的唯一ID? (52)1.MySQL API1.1. MySQL C APIC API代码是随MySQL分发的,它被包含在mysqlclient库且允许C程序存取一个数据库。
黑马程序员mysql进阶讲义

黑马程序员mysql进阶讲义
黑马程序员MySQL进阶讲义是一个针对MySQL数据库的深入学习指南。
以下是讲义的主要内容:
1.MySQL基础:涵盖了MySQL的安装与配置、数据类型、运算符、流程控制语句等基础知识。
2.数据库与表操作:详细讲解了如何创建、修改、删除数据库和表,以及如何对表进行各种操作,如插入数据、更新数据、删除数据等。
3.索引与查询优化:深入探讨了索引的原理、类型和创建方法,以及如何优化查询语句,提高查询效率。
4.存储过程与触发器:介绍了存储过程和触发器的概念、作用和实现方法,并通过实例展示了它们的用法。
5.数据库事务:详细讲解了事务的原理、隔离级别和实现方法,以及如何处理事务中的常见问题。
6.数据库安全:介绍了如何设置用户权限、加密数据、备份数据库等安全措施,确保数据库的安全性。
7.实战项目:通过一个完整的项目案例,将前面所学知识进行综合应用,提高实际操作能力。
黑马程序员MySQL进阶讲义不仅涵盖了MySQL的各个方面,而且内容深入浅出,适合有一定MySQL基础的学员进阶学习。
通过本讲义的学习,学员可以更深入地了解MySQL 的原理和应用技巧,提高在实际开发中的数据库应用能力。
mysql教案讲解(详细)

MySQL教案讲解(详细)教案章节:一、MySQL简介1.1 MySQL的历史和发展1.2 MySQL的特点和优势1.3 MySQL的安装和配置二、数据库的基本概念2.1 数据库的概念和分类2.2 数据表的结构和设计2.3 数据库的创建和管理三、SQL语言基础3.1 SQL语言简介3.2 数据定义语言(DDL)3.3 数据操作语言(DML)3.4 数据查询语言(DQL)四、数据库的增删改查操作4.1 数据的插入操作4.2 数据的删除操作4.3 数据的更新操作4.4 数据的查询操作五、索引和约束5.1 索引的概念和作用5.2 索引的创建和管理5.3 约束的概念和作用5.4 约束的添加和删除MySQL教案讲解(详细)教案章节:六、数据库的高级查询6.1 联合查询6.2 子查询6.3 数据汇总和分组6.4 排序和限制七、存储过程和函数7.1 存储过程的概念和作用7.2 存储过程的创建和执行7.3 存储函数的概念和作用7.4 存储函数的创建和执行八、触发器和事件8.1 触发器的概念和作用8.2 触发器的创建和管理8.3 事件的调度和管理8.4 事件和触发器的应用案例九、事务管理9.1 事务的概念和特性9.2 事务的控制和处理9.3 事务的提交和回滚9.4 事务的管理和优化十、MySQL性能优化10.1 查询性能的影响因素10.2 索引优化和选择10.3 查询缓存的使用和管理10.4 数据库的备份和恢复MySQL教案讲解(详细)教案章节:十一、数据库的安全性和权限管理11.1 用户权限的概念和作用11.2 用户权限的分配和管理11.3 角色和角色的使用11.4 安全性和权限管理的最佳实践十二、MySQL备份与恢复12.1 备份的重要性和策略12.2 常用备份方法介绍12.3 恢复方法和故障排除12.4 备份与恢复的自动化管理十三、MySQL性能监控与调优13.1 性能监控的关键指标13.2 性能分析工具的使用13.3 查询优化的策略和方法13.4 系统配置的优化指南十四、MySQL replication(复制)14.1 复制的工作原理和类型14.2 主从复制的设置和维护14.3 复制延迟和故障处理14.4 复制在高可用性方案中的应用十五、MySQL的高级特性15.1 全文索引和搜索15.2 空间数据类型和地理信息查询15.3 事件调度和定时任务15.4 数据库的性能分析和监控工具重点和难点解析重点:MySQL的历史和发展,特点和优势数据库的基本概念,包括数据库的分类,数据表的结构和设计,数据库的创建和管理SQL语言基础,包括DDL,DML,DQL数据库的增删改查操作索引和约束的使用和管理数据库的高级查询,包括联合查询,子查询,数据汇总和分组,排序和限制存储过程和函数的创建和执行触发器和事件的创建和管理事务的特性和管理数据库的安全性和权限管理备份与恢复策略和方法性能监控与调优的关键指标和工具复制的工作原理和类型,主从复制的设置和维护全文索引和搜索,空间数据类型和地理信息查询事件调度和定时任务,数据库的性能分析和监控工具难点:MySQL的安装和配置细节复杂SQL查询的编写和优化存储过程和函数的高级应用触发器和事件的精确控制和调度事务的并发控制和故障处理高级查询优化和性能调优复制中的延迟和故障处理全文索引和空间数据类型的应用场景事件调度和定时任务的复杂场景设计。
mysql性能优化精品PPT课件

目录索引
MySQL优化方式 MySQL技巧分享 MySQL函数
MySQL优化方式
MySQL优化方式
系统优化:硬件、架构 服务优化 应用优化
系统优化
使用好的硬件,更快的硬盘、大内存、多核CPU,专业的存 储服务器(NAS、SAN)
设计合理架构,如果 MySQL 访问频繁,考虑 Master/Slave 读写分离;数据库分表、数据库切片(分布式),也考虑使 用相应缓存服务帮助 MySQL 缓解访问压力
选项
max_connections query_cache_size sort_buffer_size
record_buffer table_cache
缺省值
100 0 (不打开)M 16M
16M 512
说明
MySQL服务器同时处理的数据库连接的最大数量
查询缓存区的最大长度,按照当前需求,一倍一倍 增加,本选项比较重要
每个线程的排序缓存大小,一般按照内存可以设置 为2M以上,推荐是16M,该选项对排序order by, group by起作用
每个进行一个顺序扫描的线程为其扫描的每张表分 配这个大小的一个缓冲区,可以设置为2M以上
为所有线程打开表的数量。增加该值能增加mysqld 要求的文件描述符的数量。MySQL对每个唯一打开 的表需要2个文件描述符。
8M
128M 0 256M
innodb_log_buffer_size
128K
8M
说明
InnoDB使用一个缓冲池来保存索引和原始数据, 这 里你设置越大,你在存取表里面数据时所需要的磁盘 I/O越少,一般是内存的一半,不超过2G,否则系 统会崩溃,这个参数非常重要
InnoDB用来保存 metadata 信息, 如果内存是4G, 最好本值超过200M
mysql8.0使用手册

mysql8.0使用手册MySQL 8.0 使用手册欢迎使用 MySQL 8.0 使用手册。
本手册将为您提供详细的关于MySQL 8.0 数据库管理系统的使用指南和最佳实践。
第一章:介绍1.1 MySQL 8.0 简介- MySQL 8.0 是一个开源的关系型数据库管理系统,它提供了高性能、可靠性和可扩展性的解决方案。
- MySQL 8.0 支持多种操作系统,并且具有广泛的应用领域,包括Web 应用程序、企业级解决方案和大数据分析等。
1.2 MySQL 8.0 的新特性- MySQL 8.0 引入了许多新特性,包括窗口函数、CTE(公共表表达式)、JSON 支持、InnoDB 引擎的改进以及更好的性能和安全性等。
第二章:安装和配置2.1 下载和安装 MySQL 8.0- 介绍如何从官方网站下载 MySQL 8.0,并提供安装步骤和注意事项。
2.2 配置 MySQL 8.0- 解释 MySQL 8.0 的配置文件和参数,并提供常见配置示例和最佳实践。
第三章:管理和维护3.1 数据库创建和管理- 详细介绍如何创建和管理数据库,包括创建数据库、修改数据库属性、备份和恢复数据库等。
3.2 表和索引管理- 解释如何创建和管理表,包括创建表、修改表结构、添加和删除索引等。
3.3 用户和权限管理- 介绍如何创建和管理用户,包括创建用户、授权和撤销权限等。
3.4 数据备份和恢复- 提供数据备份和恢复的方法,包括逻辑备份和物理备份。
第四章:查询和优化4.1 SQL 查询基础- 介绍 SQL 查询的基本语法和常用查询操作,如 SELECT、INSERT、UPDATE 和 DELETE 等。
4.2 查询优化- 提供查询优化的技巧和策略,包括索引优化、查询缓存、查询重写等。
4.3 性能监控和调优- 解释如何监控和调优 MySQL 8.0 的性能,包括使用性能监控工具和分析执行计划等。
第五章:高级主题5.1 复制和高可用性- 介绍 MySQL 8.0 的复制特性和高可用性解决方案,包括主从复制、半同步复制和组复制等。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/** ------------------------------------------------------------------- * |-标题:MySQL优化自学手册* |-整理: 杨白玉* |-时间: 2015年9月25日* ------------------------------------------------------------------- */mysql优化前提:数据库性能的优劣直接影响到程序的性能,所以数据库的设计与参数配置至关重要。
数据库优化的方式:1、数据库设计2、sql语句的优化3、数据库参数的配置(扩展数据库的缓存或者数据库的空间)4、恰当的硬件资源(钱的问题,有钱就能满足)第一章数据库的设计一、数据库的设计:数据库的设计指的就是表的设计。
设计要符合三范式(规范的模式),有时我们也需要适当的逆范式;二、什么是三范式?第一范式:1NF是对属性(可理解为字段)的原子性约束,要求属性具有原子性,不可再分。
第二范式:2NF是对记录的唯一性约束,要求记录有唯一的标识,即实体的唯一性;第三范式:3NF是对字段冗余的约束,即任何字段不能由其他字段派生出来,要求字段没有冗余,这是可以做到的。
然而,没有冗余的数据库未必是好的数据库,有时候为了提高运行的效率,我们也会使用适当的逆范式,方法就是:增加字段。
一般来说,1NF在关系型数据库中是自动满足的;2NF通常通过主键自增的唯一性来约束。
而且,记录本身也很少会完全一样;3NF主要是在主从表中,不会出现相同的字段与字段值;第二章 SQL语句的优化一、SQL语句优化的步骤:1、通过show status 命令了解各种sql的执行频率;2、定位执行效率较低的SQL语句,主要集中在查询语句3、通过explain分析低效率的sql语句的执行情况4、确定问题并采取相应的优化措施二、sql语句有几类?ddl(数据定义语句)[create alter drop]dml(数据操作语句)[insert delete update]selectdtl(数据事物语句)[commit rollback savepoint]dcl(数据控制语句)[grant revoke]show status命令该命令可以显示mysql数据库当前的状态,我们主要重点关注“Com”开头的指令。
1、显示数据库开启本次会话后到目前的信息:show status like “Com%”; <=> show session status like “Com%”;2、显示数据库从启动到目前的信息:Show global status like “Com%”;说明:通过上述命令,可以很容易的了解到当前的数据库是以插入更新为主还是以查询为主,以及各类sql大致的执行比例是多少。
3、显示连接数据库的次数,如果并发高的话,就需要考虑并发的问题:show status like “Connections”;4、mysql服务器工作的时间(单位是秒)show status like “Uptime”;5、慢查询(1)、定位慢查询的次数(默认是10秒)show status like “Slow_queries”;(2)、慢查询是我们优化的重点,默认情况下是10s;show variables like “long_query_time”;(3)、设置慢查询的时间:set long_query_time=值;(4)、查询慢查询的次数:show status like “slow%”;分析:如何在项目中,找到慢查询的select语句,mysql数据库支持把慢查询语句,记录到日志中供程序员分析,默认是不启用的;方法:进入到mysql安装目录,切换到mysql的bin目录下,使用mysqld.exe启动;命令:XX>mysqld.exe -show-query-log知识扩展:如果你的数据库存储引擎是MyISAM的,则当创建一个表后,再磁盘中会生成3个文件:*.frm 记录表结构| *.myd 数据| *.myi 索引数据库优化方式一:添加索引1、索引介绍对于提高数据库的性能,索引是绝佳选择,无需增加硬件、改变程序、调整sql语句,就能达到数据库优化的效果;然而,索引虽然提高了数据的查询效率,但却是以插入、更新、删除的速度为代价的,增加了大量的I/O,具体原因如下:我们知道,索引是保存在*.myi文件中进行维护的,索引类似字典的目录,在查询的时候可以快速定位,而不需要去逐条查询,这明显加快了查询效率;然而数据库在每次执行增、删、改操作时,*.myi文件对应的每次需要去更新维护索引信息,这无疑就增加了I/O;2、索引的类型(1)、主键索引(primary key,一张表只能有一个主键)(2)、唯一索引(unique,建表的同时设置,是没有效果的,需要建好表后,单独添加该索引)(3)、普通索引(index)(4)、全文索引(fulltext,只有myisam存储引擎支持),sphinx+中文分词(5)、复合索引(多列组合在一起,很少使用;格式:alter table 表名add index 索引名(字段1,字段2...) )3、索引的使用方式3-1-1:添加主键索引:alter table 表名add primary key(字段);3-1-2:删除主键索引:alter table 表名drop primary key;3-2-1:创建“唯一索引、普通索引、全文索引”的方式:carete [unique][fulltext][index] 索引名on 表名(字段);alter table 表名add [unique][fulltext][index] 索引名(字段);3-2-2:删除“唯一索引、普通索引、全文索引”的方式:drop [unique][fulltext][index] 索引名on 表名;alter table 表名drop [unique][fulltext][index] 索引名;3-3-1:查询索引show index from 表名;show keys form 表名;desc 表名;4、使用索引的注意事项4-1:对于使用like的查询,查询条件如果是”%查询关键词”不会使用到索引;4-2:如果查询条件中有or,即使其中有条件带索引,其实也不会使用;4-3:对于复合索引,只要查询条件使用了最左边的索引列,索引一般就会被使用;如果查询条件的索引不是使用的最左边的索引列,则不会使用索引;4-4:如果字段的类型是字符串,那么一定要在查询条件中把查询关键词用引号引起来,否则不会使用到索引。
4-5:如果mysql估计使用全表扫描要比索引更快,则自动忽略不适用索引;5、如何检测索引是否有效命令:show status like “handler_read%”;返回参数说明:handler_read_key :这个值越高越好,越高表示使用索引查询到的次数越多;handler_read_rnd_next :这个值越高,说明查询效率越低;6、explain分析语句格式:explain 查询语句\G返回结果:id SQL语句会使用的索引select_type SIMPLE:普通查询table 表名type ALL:全表扫描,性能最次;system:系统表;const:表最多有一个匹配行possible_keys 可能用到的索引类型(其中NULL表示无索引类型)key 实际用到的索引类型(其中NULL表示无索引)key_len 索引的长度(其中NULL表示索引长度为零,其实就是没有索引)ref 无实际意义rows 本次查询检索了多少条记录Extra 查询细节信息7、myisam和innodb的区别是什么?(1)、myisam不支持外键,innodb支持;(2)、myisam不支持事务,innodb支持;(3)、对数据的保存方式不同:如果存储引擎是myisam,则创建一张表的时候,分别生成3个文件:*.frm | *.myd | *.myi;如果存储引擎是innodb,则创建一张表的时候,只生成一个文件:*.frm,而数据则存储在xxx/data/ibdata1文件中;(4)、myisam存储引擎,在数据删除后,*.MYD文件大小并不会变小(即空间不会自动回收),随着*.MYD文件无限膨胀,最终结果会导致磁盘开销达到峰值,数据无法继续添加,这对于QQ等这等类大批量增删操作频繁的软件,很要命;所以,对于使用myisam存储引擎的数据表,需要定期使用指令:“optimize table 表名;”进行空间回收;(5)、myisam的查询速度要比innodb更快;8、对于使用索引后的大批量插入数据,需要进行如下操作:8-1:如果存储引擎是myisam://第一步:禁用索引,防止随着数据一条一条录入,而索引也一条一条添加;alter table 表名display keys;//第二步:大批量增加数据loading data;//第三步:启用索引,此时索引会自动给新增的数据添加索引alter table 表名enable keys;8-2:如果存储引擎是innodb://第一步:将需要导入的数据按照主键排序;//第二步:关闭唯一性校验;set unique_checks=0;//第三步:关闭自动提交;set autocommit=0◆数据库优化方式二:group by语句中禁用order by主要针对group by语句;默认情况下,mysql对所有的group by col1,col2…都会进行进行文件排序,这个与在查询中使用order by col1,col2…类似。
这明显是影响查询效率的,所以我们需要在使用group by 语句的同时,使用order by null禁止排序;格式如下:select * from 表group by 字段order by null;◆数据库优化方法三:尽量使用join查询代替子查询因为使用join查询,mysql不需要在内存中创建临时表。
◆数据库优化方法四:如果想在or的查询语句中利用索引,那么在or的每个条件都必须增加索引,否则不会使用到索引;数据库优化方法五:字段类型、长度尽量使用恰当的类型、确定的存储数值,以保证结果的准确性;比如:md5加密后的数据,长度为32;所以在保存用户密码的时候,只用char优于varchar;第三章表的垂直分割和水平分割一、水平分割假设一张表中有100亿条QQ账号记录,我们可以把这一张表划分成100张,这100张表的字段完全一样。
表然后每张表中只存储1亿条记录,这100张表的表名格式为:表名0、表名1、表名2…表名99;说明:表名后边的0、1、2…99这些标号是来源于:当前记录的ID%100来计算得知,范围为:0~99;然后在添加记录的时候,根据当前记录的ID%100得到的值来决定往哪张表中添加记录;读取的时候也是同理;原理图如下:二、垂直分割:主要方式:把一张表的字段分成几张表来保存;垂直分割比较常见,不再赘述;第四章读写分离技术读写分离的原理:目的:给大型网站减轻查询压力;做法及原理:在服务器端安装amoeba服务器(新浪自己做的),这个工具可以自动判断sql语句是dml语句还是select语句;如果是dml语句,自动操作master主数据库,然后主数据库会通过mysql proxy把数据自动同步到slave从数据库;如果是select语句,就自动找一个当前压力比较小的slave从数据库进行查询操作,然后将结果返回,这就是读写分离技术;原理图:amoeba的汉语读法:爱魔棒另外需要注意的是:在数据库读写分离技术中,数据库集群都是单独装到一太服务器上的;知识扩展:Mysql.ini的有效配置文件内容:。