mysql的sql优化(前奏)

标签: mysql sql 优化 | 发表时间:2014-01-19 20:09 | 作者:aliahhqcheng
出处:http://www.iteye.com

要优化mysql首先要知道什么地方需要优化,然后才能针对具体问题进行优化?难道不是吗?什么分库分表,建立索引....摆脱不要那么官方好吗?

 

1.学会和培养使用mysql的查看命令的使用习惯

什么你忘记如何创建表的语句了??

mysql> ? table
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
   ALTER TABLE
   ANALYZE TABLE
   CHECK TABLE
   CHECKSUM TABLE
   CREATE TABLE
   DROP TABLE
   OPTIMIZE TABLE
   RENAME TABLE
   REPAIR TABLE
   SHOW
   SHOW CREATE TABLE
   SHOW TABLE STATUS
   SPATIAL
   TRUNCATE TABLE

 

mysql> ? SHOW CREATE TABLE
Name: 'SHOW CREATE TABLE'
Description:
Syntax:
SHOW CREATE TABLE tbl_name

Shows the CREATE TABLE statement that creates the named table. To use
this statement, you must have some privilege for the table. This
statement also works with views.
SHOW CREATE TABLE quotes table and column names according to the value
of the sql_quote_show_create option. See
http://dev.mysql.com/doc/refman/5.5/en/server-system-variables.html.

URL: http://dev.mysql.com/doc/refman/5.5/en/show-create-table.html

Examples:
mysql> SHOW CREATE TABLE t\G
*************************** 1. row ***************************
       Table: t
Create Table: CREATE TABLE t (
  id INT(11) default NULL auto_increment,
  s char(60) default NULL,
  PRIMARY KEY (id)
) ENGINE=MyISAM

 这回你知道了吧!!!

另外 ? contents会告诉你你可以查看那些命令

mysql> ? contents;
You asked for help about help category: "Contents"
For more information, type 'help <item>', where <item> is one of the following
categories:
   Account Management
   Administration
   Compound Statements
   Data Definition
   Data Manipulation
   Data Types
   Functions
   Functions and Modifiers for Use with GROUP BY
   Geographic Features
   Help Metadata
   Language Structure
   Plugins
   Procedures
   Storage Engines
   Table Maintenance
   Transactions
   User-Defined Functions
   Utility

 上面这个查看帮助文档的使用,可以帮助你在查找需要优化的sql语句。

 

2.mysql的慢查询日志

mysql> show global variables like 'log_%';
+---------------------------------+--------------------------+
| Variable_name                   | Value                    |
+---------------------------------+--------------------------+
| log_bin                         | OFF                      |
| log_bin_trust_function_creators | OFF                      |
| log_error                       | /var/log/mysql/error.log |
| log_output                      | FILE                     |
| log_queries_not_using_indexes   | OFF                      |
| log_slave_updates               | OFF                      |
| log_slow_queries                | OFF                      |
| log_warnings                    | 1                        |
+---------------------------------+--------------------------+
8 rows in set (0.01 sec)

mysql> show session variables like 'log_%';
+---------------------------------+--------------------------+
| Variable_name                   | Value                    |
+---------------------------------+--------------------------+
| log_bin                         | OFF                      |
| log_bin_trust_function_creators | OFF                      |
| log_error                       | /var/log/mysql/error.log |
| log_output                      | FILE                     |
| log_queries_not_using_indexes   | OFF                      |
| log_slave_updates               | OFF                      |
| log_slow_queries                | OFF                      |
| log_warnings                    | 1                        |
+---------------------------------+--------------------------+
8 rows in set (0.00 sec)

 第一个是mysql的全局配置,第二个是mysql的本次链接的配置。这几个 日志介绍。默认mysql是没有开启慢查询日志的。需要将其设置为开启,并设置慢查询的配置。

mysql的慢查询日志的开启和设置及分析

 

3.通过mysql的慢查询日志很容易就能够知道具体那个sql语句出现了问题。定位到问题,接着就是分析这个sql语句的执行情况。使用的表是否有索引,索引是否使用了,是否走全表扫描了,是否使用了临时表.....

mysql> explain select * from test\G
*************************** 1. row ***************************
           id: 1
  select_type: SIMPLE
        table: test
         type: ALL
possible_keys: NULL
          key: NULL
      key_len: NULL
          ref: NULL
         rows: 2
        Extra: 
1 row in set (0.00 sec)

 使用explain或desc查看sql的执行信息,\G是使这些信息以垂直的方式显示。 其中列名及其值代表的意义

 

4.针对3的分析结果进行相应的优化。

 

 

 

 



已有 0 人发表留言,猛击->> 这里<<-参与讨论


ITeye推荐



相关 [mysql sql 优化] 推荐:

mysql的sql优化(前奏)

- - 数据库 - ITeye博客
要优化mysql首先要知道什么地方需要优化,然后才能针对具体问题进行优化. 什么分库分表,建立索引....摆脱不要那么官方好吗. 1.学会和培养使用mysql的查看命令的使用习惯. 什么你忘记如何创建表的语句了. SHOW CREATE TABLE Name: 'SHOW CREATE TABLE' Description: Syntax: SHOW CREATE TABLE tbl_name Shows the CREATE TABLE statement that creates the named table.

MySql动态SQL

- - SQL - 编程语言 - ITeye博客
13.7. 用于预处理语句的SQL语法. MySQL 5.1对服务器一方的预制语句提供支持. 如果您使用合适的客户端编程界面,则这种支持可以发挥在MySQL 4.1中实施的高效客户端/服务器二进制协议的优势. 候选界面包括MySQL C API客户端库(用于C程序)、MySQL Connector/J(用于Java程序)和MySQL Connector/NET.

MySQL 数据库性能优化之SQL优化

- - OurMySQL
注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础. IO永远是数据库最容易瓶颈的地方,这是由数据库的职责所决定的,大部分数据库操作中超过90%的时间都是 IO 操作所占用的,减少 IO 次数是. SQL 优化中需要第一优先考虑,当然,也是收效最明显的优化手段.

MYSQL查询SQL语句性能优化方法

- - 数据库 - ITeye博客
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,. Sql 代码 : select id from t where num is null;.

如何高效快速地优化MySQL、SQL语句(附源码)

- - 运维派
韩锋,宜信技术研发中心数据库架构师. 精通多种关系型数据库,曾任职于当当网、TOM在线等公司,曾任多家公司首席DBA、数据库架构师等职,多年一线数据库架构、设计、开发经验. 著有《SQL优化最佳实践》一书. 优化SQL,是DBA常见的工作之一. 如何高效、快速地优化一条语句,是每个DBA经常要面对的一个问题.

数据仓库中的SQL性能优化(MySQL篇)

- - 奔跑的兔子
做数据仓库的头两年,使用高配置单机 + MySQL的方式来实现所有的计算(包括数据的ETL,以及报表计算. 用过MySQL自带的MYISAM和列存储引擎Infobright. 这篇文章总结了自己和团队在那段时间碰到的一些常见性能问题和解决方案. P.S.如果没有特别指出,下面说的mysql都是指用MYISAM做存储引擎.

sql优化

- - 数据库 - ITeye博客
是对数据库(数据)进行操作的惟一途径;. 消耗了70%~90%的数据库资源;独立于程序设计逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低;. 可以有不同的写法;易学,难精通. 固定的SQL书写习惯,相同的查询尽量保持相同,存储过程的效率较高. 应该编写与其格式一致的语句,包括字母的大小写、标点符号、换行的位置等都要一致.

sql 优化

- - SQL - 编程语言 - ITeye博客
转:数据库SQL优化大总结之 百万级数据库优化方案. 2014-07-18 09:33 雲霏霏 雲霏霏的博客 字号:. 网上关于SQL优化的教程很多,但是比较杂乱. 近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充. 网上关于SQL优化的教程很多,但是比较杂乱. 近日有空整理了一下,写出来跟大家分享一下,其中有错误和不足的地方,还请大家纠正补充.

浅谈MySQL中优化sql语句查询常用的30种方法

- - 数据库 - ITeye博客
本篇文章是对MySQL中优化sql语句查询常用的30种方法进行了详细的分析介绍,需要的朋友参考下. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描.

30个MySQL千万级大数据SQL查询优化技巧详解

- - IT瘾-tuicool
本文总结了30个mysql千万级大数据SQL查询优化技巧,特别适合大. 1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id from t where num=0.