MySQL:性能优化

转载 2015年11月18日 12:22:14
【例16.1】使用EXPLAIN语句来分析一个查询语句
EXPLAIN SELECT * FROM fruits;

【例16.2】下面是查询语句中不使用索引和使用索引的对比。
EXPLAIN SELECT * FROM fruits WHERE f_name='apple';  /*分析未使用索引时的查询情况*/
CREATE INDEX index_name ON fruits(f_name);          /*创建索引*/
EXPLAIN SELECT * FROM fruits WHERE f_name='apple';  /*分析使用索引时的查询情况*/

【例16.3】查询语句中使用LIKE关键字,并且匹配的字符串中含有‘%’符,EXPLAIN语句执行如下:
EXPLAIN SELECT * FROM fruits WHERE f_name like '%x';
EXPLAIN SELECT * FROM fruits WHERE f_name like 'x%';

【例16.4】本例在表fruits中f_id、f_price字段创建多列索引,验证多列索引的使用情况。
CREATE INDEX index_id_price ON fruits(f_id, f_price);
EXPLAIN SELECT * FROM fruits WHERE f_id='l2';
EXPLAIN SELECT * FROM fruits WHERE f_price=5.2;

【例16.5】查询语句使用OR关键字的情况:
EXPLAIN SELECT * FROM fruits WHERE f_name='apple' or s_id=101 \G;
EXPLAIN SELECT * FROM fruits WHERE f_name='apple' or f_id='l2' \G;

【例16.6】下面的会员表(members)主要用来存储会员登录认证信息,
CREATE TABLE members (
  Id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(255) DEFAULT NULL ,
  password varchar(255) DEFAULT NULL ,
  last_login_time datetime DEFAULT NULL ,
  last_login_ip varchar(255) DEFAULT NULL ,
  PRIMARY KEY (Id)
) ;


CREATE TABLE members_detail (
  member_id int(11) NOT NULL DEFAULT 0,
  address varchar(255) DEFAULT NULL ,
  telephone varchar(16) DEFAULT NULL ,
  description text
) ;

SELECT * FROM members LEFT JOIN members_detail ON members.id=members_detail.member_id

【例16.7】会员信息表和会员组信息表如下:
CREATE TABLE vip(
  Id int(11) NOT NULL AUTO_INCREMENT,
  username varchar(255) DEFAULT NULL,
  password varchar(255) DEFAULT NULL,
  groupId INT(11) DEFAULT 0,
  PRIMARY KEY (Id)
) ;


CREATE TABLE vip_group (
  Id int(11) NOT NULL AUTO_INCREMENT,
  name varchar(255) DEFAULT NULL,
  remark varchar(255) DEFAULT NULL,
  PRIMARY KEY (Id)
) ;

CREATE TABLE temp_vip (
  Id int(11) NOT NULL AUTO_INCREMENT,
  user_name varchar(255) DEFAULT NULL,
  group_name varchar(255) DEFAULT NULL,
  group_remark varchar(255) DEFAULT NULL,
  PRIMARY KEY (Id)
);

INSERT INTO temp_vip(user_name, group_name, group_remark)
SELECT v.username,g.name,g.remark
FROM vip as v ,vip_group as g
WHERE v.groupId=g.Id;


【例16.8】使用ANALYZE TABLE来分析message表,执行的语句及结果如下:
ANALYZE TABLE fruits;


综合案例

步骤1:分析查询语句,理解索引对查询速度的影响。
1.使用分析查询语句“SELECT * FROM fruits WHERE f_name='banana';”,执行的语句及执行结果如下:
EXPLAIN SELECT * FROM fruits WHERE f_name='banana';

2.使用分析查询语句“SELECT * FROM fruits WHERE f_name like '%na'”,执行的语句及执行结果如下:
EXPLAIN SELECT * FROM fruits WHERE f_name like '%na';

3.使用EXPLAIN分析查询语句下面执行“SELECT * FROM fruits WHERE f_name like 'ba%';”语句如下:
EXPLAIN SELECT * FROM message WHERE title like ' ba%';


步骤2:练习分析表、检查表、优化表。
1.使用ANALYZE TABLE语句分析fruits表,执行的语句及结果如下:
ANALYZE TABLE fruits;

2.使用CHECK TABLE语句检查表fruits,执行的语句及结果如下:
CHECK TABLE fruits;


MySQL性能优化的最佳21条经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据...
  • kaka1121
  • kaka1121
  • 2016年11月29日 17:09
  • 3145

MySQL性能优化方案总结

MySQL进行优化, 效果: SQL和索引 > 数据库表结构 > 系统配置 > 硬件 ;但成本从低到高。...
  • sinat_23080035
  • sinat_23080035
  • 2016年10月13日 00:26
  • 3721

Mysql性能优化之几个实际优化示例

数据库性能优化的文章铺天盖地,但最重要的是把这些恰当的应用到实际生产环境中,本文以真实的优化案例来详细的介绍Mysql数据库方面的先化技巧,主要的优化技术为:(1)把逐个循环的子查询变为一个查询统计语...
  • cpaqyx
  • cpaqyx
  • 2014年12月06日 17:37
  • 2576

mysql通过将or改成union来优化sql性能问题一例

某系统测试环境有支SQL执行时间较长,开发人员请求dba协助优化。 原SQL如下: SELECT   g.id,           ----省略-----     FROM    g,  ...
  • zengxuewen2045
  • zengxuewen2045
  • 2016年10月27日 22:49
  • 2419

Mysql查询性能优化-善用Explain语句

Mysql查询性能优化-善用Explain语句     在项目中验证sql语句执行效率的时候最直观的方式就是查看其执行时间,但是在线上环境中如果不慎运行一个效率十分低下的sql导致数据库down掉了,...
  • u012091092
  • u012091092
  • 2016年11月28日 14:50
  • 2348

浅析Mysql Join语法以及性能优化

注:转载之>>>http://www.jb51.net/article/50427.htm 内外联结的区别是内联结将去除所有不符合条件的记录,而外联结则保留其中部分。外左联结与外右联结的区别在于...
  • b1198103958
  • b1198103958
  • 2015年08月19日 09:42
  • 649

服务器性能优化和Mysql性能优化

影响性能的几个因素 服务器硬件 CPU 内存 IO子系统 服务器系统 CentOS系统参数优化 sysctlconf 优化 limitconf参数优化 磁盘调度策略 文件系统对性能的影响 数据库存储引...
  • liuzp111
  • liuzp111
  • 2017年01月07日 00:11
  • 3252

性能优化之MySQL优化(三)- count()和max()查询优化

一、max()查询优化         rows一行的值为16451说明需要查询16451行才能找到,当数据量很大的时候查询起来会很耗时,此时我们可以在payment_date列建立索引 ...
  • u011712163
  • u011712163
  • 2016年11月23日 16:36
  • 3276

MySQL性能优化的最佳经验

今天,数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我们程序员需要去关注的事情。当我们去设计数据库表结构,对操作数据...
  • z15818264727
  • z15818264727
  • 2016年08月24日 16:45
  • 5231

MySQL 性能调优的10个方法

MYSQL 应该是最流行了 WEB 后端数据库。WEB 开发语言最近发展很快,PHP, Ruby, Python, Java 各有特点,虽然 NOSQL 最近越來越多的被提到,但是相信大部分架构师还是...
  • u011225629
  • u011225629
  • 2015年07月27日 22:34
  • 4662
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:MySQL:性能优化
举报原因:
原因补充:

(最多只允许输入30个字)