1.慢查询
- 查询慢查询的次数:show status like 'slow_queries':不仅查的select,还包括其他操作。
- 查询慢查询的时间设置:show variables like 'long_query_time'
- 修改慢查询时间:set long_query_time =?
- 慢查询日志记录:bin\mySqld.exe --safe-mode --slow-query-log mysql 5.5及以上
- bin\muysqld.exe -log-slow-queries =d:\abc.log 低版本
- 先关闭mysql,再重新启动,如果启用慢查询日志默认文件把文件放在my.ini里面记录的位置。
2.sql分析
可以通过Explain语句分析sql.
eg:explain select * from temp;
分析结果形式如下:
table | type | possible_keys | key | key_len | ref | rows | Extra
EXPLAIN列的解释:
www.2cto.com
table
显示这一行的数据是关于哪张表的
type
这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL
possible_keys
显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句
key
实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引
key_len
使用的索引的长度。在不损失精确性的情况下,长度越短越好
ref
显示索引的哪一列被使用了,如果可能的话,是一个常数
rows
MYSQL认为必须检查的用来返回请求数据的行数
Extra
关于MYSQL如何解析查询的额外信息。将在表中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢
extra列返回的描述的意义
www.2cto.com
Distinct
一旦MYSQL找到了与行相联合匹配的行,就不再搜索了
Not exists
MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,
就不再搜索了
Range checked for each
Record(index map:#)
没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一
Using filesort
看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行
Using index
列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候
Using temporary
看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上 www.2cto.com
Where used
使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题
不同连接类型的解释(按照效率高低的顺序排序)
system
表只有一行:system表。这是const连接类型的特殊情况
const
表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待
eq_ref
在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用
ref
这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好 www.2cto.com
range
这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况
index
这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)
ALL
这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免
3.查询数据库设置属性
A.show global variables
B.show variables like 'query_cache%'
4.建索引的几大原则
1>.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a = 1 and b = 2 and c > 3 and d = 4 如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意调整。
2>.=和in可以乱序,比如a = 1 and b = 2 and c = 3 建立(a,b,c)索引可以任意顺序,mysql的查询优化器会帮你优化成索引可以识别的形式
3>.尽量选择区分度高的列作为索引,区分度的公式是count(distinct col)/count(*),表示字段不重复的比例,比例越大我们扫描的记录数越少,唯一键的区分度是1,而一些状态、性别字段可能在大数据面前区分度就是0,那可能有人会问,这个比例有什么经验值吗?使用场景不同,这个值也很难确定,一般需要join的字段我们都要求是0.1以上,即平均1条扫描10条记录
4>.索引列不能参与计算,保持列“干净”,比如from_unixtime(create_time) = ’2014-05-29’就不能使用到索引,原因很简单,b+树中存的都是数据表中的字段值,但进行检索时,需要把所有元素都应用函数才能比较,显然成本太大。所以语句应该写成create_time = unix_timestamp(’2014-05-29’);
5>.尽量的扩展索引,不要新建索引。比如表中已经有a的索引,现在要加(a,b)的索引,那么只需要修改原来的索引即可
相关推荐
### MySQL的简单应用知识点 #### 一、MySQL简介与安装 MySQL是一款广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、稳定性和易用性著称,在Web开发、数据分析等领域有着广泛的应用。对于初学者来说,掌握...
本文将深入探讨如何在VC++中实现这一功能,主要基于标题"vc 连接mysql简单应用"和描述中提到的内容。 首先,我们需要了解两个关键组件:MySQL C API(应用程序编程接口)和MySQL Connector/C。MySQL C API是MySQL...
这个简单应用可能包含BaseMVC类或模块,它是基础的MVC结构,可能包含了SpringMVC的初始化配置、通用的Controller基类、以及一些全局性的设置。BaseMVC可能是整个应用的基础,为其他具体业务逻辑提供支撑。 综上所述...
**SpringBoot与MySQL简单应用详解** SpringBoot是Spring框架的一个模块,旨在简化Spring应用程序的初始搭建以及开发过程。它集成了大量的常用库,使得开发者能够快速地创建一个独立运行的、生产级别的Java应用。而...
随着技术的发展,如今广泛使用的数据库管理系统包括Oracle、SQL Server、MySQL等。 数据库理论基础是学习数据库的第一步,主要包含数据存储方式、数据库在开发中的作用、数据库访问技术、数据库泛型以及SQL语言等...
分析:商品信息存在于商品表,而且商品表中包含商品名称此被查询信息,因此这是只需要涉及一个表就可以完成简单单表查询。 (2)查询ID为1的订单。 分析:所有的订单信息存在于订单表中,而且订单用户ID也存在于此表...
全书共分为5个部分,首先讲解了使用MySQL所需了解的数据库方面的知识,接着探讨了PHP的基本脚本语言、PHP函数以及编写可管理的简捷代码的技巧,然后给出了两个简单的应用程序,来宾簿和调查表,在实践中应用所学的...
简单介绍了mysql的原理与应用,对mysql入门者有一定的帮助
在本实例中,我们主要探讨如何使用Java的Servlet技术与MySQL数据库进行交互,这是一个基于DAO(Data Access Object)模式但不使用Bean的简单应用。首先,让我们深入了解一下Servlet、DAO模式以及MySQL数据库的基础...
MySQL的特点是简单易用,有着强大的社区和商业支持,但在一定程度上存在封闭性。 在开源协议方面,MySQL提供了不同版本供用户选择。MySQL Community Edition是免费开源的GPL协议,适合开源爱好者和小型项目。而...
### PHP+MySQL简单投票系统知识点解析 #### 一、系统架构与功能概述 该系统主要由前后端两大部分构成,实现基本的投票功能。前端负责展示投票题目与选项,并允许用户进行投票或查看投票结果;后端则处理数据存储与...
本文将深入解析如何在Java应用程序中实现与MySQL数据库的连接,这一过程涉及到环境搭建、驱动集成、数据库操作等多个关键步骤。 ### 环境准备 在开始之前,确保以下环境已经搭建好: 1. **Eclipse IDE**:版本为...
本章通过演示如何使用mysql客户程序创造和使用一个简单的数据库,提供一个MySQL的入门教程。mysql(有时称为“终端监视器”或只是“监视”)是一个交互式程序,允许你连接一个MySQL服务器,运行查询并察看结果。...
**PHP与MySQL简介** ...通过实践这个简单的网站源码,你将能够掌握PHP和MySQL的基本应用,为后续的Web开发打下坚实的基础。同时,你还可以尝试添加更多功能,如搜索、评论、购物车等,以提升自己的技能。
在本教程中,我们将探讨如何使用 MySQL 数据库创建一个简单的 Web 应用程序。这个过程主要涉及以下几个关键组件和技术:MySQL、JDBC(Java Database Connectivity)、JavaServer Pages(JSP)、JavaServer Pages ...
在树莓派上安装MySQL数据库是一项实用的技能,尤其对于那些想要在小型设备上搭建个人服务器或进行数据存储的用户。...请仔细阅读,以便更好地理解和应用这些知识。通过实践,你将在树莓派上的MySQL管理上变得更加熟练。
在本文中,我们将深入探讨如何使用Visual C++(VC++6.0)开发一个基于MySQL数据库的图形用户界面(GUI)应用程序。这个样例项目旨在帮助新手了解如何配置VC++工程,以及如何利用MySQL提供的API接口与MySQL Server...
这是一个用于连接C++应用程序和MySQL服务器的API。确保已经安装了MySQL Connector/C++,并且将其包含路径添加到项目的编译器设置中。 接下来,我们创建一个C++程序,引入必要的头文件,如`#include <mysql_driver.h...
《FLEX+JAVA+MYSQL简单登录程序:快速入门指南》 在信息技术领域,构建Web应用程序是常见的任务之一,尤其在企业级应用中。本指南将详细介绍一个基于FLEX前端、JAVA后端和MYSQL数据库的简单登录程序的实现,旨在...
接下来,我们将创建一个简单的应用程序,它将允许用户连接到MySQL数据库,执行查询,并显示结果。以下是关键步骤和代码解释: 1. **连接MySQL数据库**: 使用`PyMySQL`的`connect()`函数建立与MySQL服务器的连接。...