zoukankan      html  css  js  c++  java
  • 1025WHERE执行顺序以及MySQL查询优化器

    转自http://blog.csdn.net/zhanyan_x/article/details/25294539

    -- WHERE执行顺序
    -- 过滤比较多的放在前面,然后更加容易匹配,从左到右进行执行;一般都是优化器很智能的优化了,无需用户处理
    -- 如何查看优化后的语句
    EXPLAIN EXTENDED
    SELECT SQL_NO_CACHE * FROM db.table
    WHERE is_day=1 AND DATE(ex_date)='2015-07-01' ;

    SHOW WARNINGS;

    -- 第一种确实比第二种要慢一点
    EXPLAIN EXTENDED
    SELECT SQL_NO_CACHE * FROM TABLE
    WHERE is_day=1 AND run_date='2015-07-01'

    EXPLAIN EXTENDED
    SELECT SQL_NO_CACHE * FROM TABLE
    WHERE run_date='2015-07-01' AND is_day=1

    此文章主要向大家描述的是MySQL查询优化系列之MySQL查询优化器,当你在对一查询进行提交的时候,MySQL数据库会对它进行分析,主要是看其是否可以用来做一些优化使处理该查询的速度更快。

    这一部分将介绍查询优化器是如何工作的。如果你想知道MySQL采用的优化手段,可以查看MySQL参考手册。

    当然,MySQL查询优化器也利用了索引,但是它也使用了其它一些信息。例如,如果你提交如下所示的查询,那么无论数据表有多大,MySQL执行它的速度都会非常快:

    SELECT * FROM tbl_name WHERE 0;

    在这个例子中,MySQL查看WHERE子句,认识到没有符合查询条件的数据行,因此根本就不考虑搜索数据表。你可以通过提供一个EXPLAIN语句看到这种情况,这个语句让MySQL显示自己执行的但实际上没有真正地执行的SELECT查询的一些信息。如果要使用EXPLAIN,只需要在EXPLAIN单词放在SELECT语句的前面:

    MySQL> EXPLAIN SELECT * FROM tbl_name WHERE 0G  id: 
    1  select_type: SIMPLE  table: NULL  type:
     NULL  possible_keys: NULL  key:
     NULL  key_len: NULL  ref: NULL  rows: 
    NULL  Extra: Impossible WHERE

    通常情况下,EXPLAIN返回的信息比上面的信息要多一些,还包括用于扫描数据表的索引、使用的联结类型、每张数据表中估计需要检查的数据行数量等非空(NULL)信息。

    优化器是如何工作的

    MySQL查询优化器有几个目标,但是其中最主要的目标是尽可能地使用索引,并且使用最严格的索引来消除尽可能多的数据行。你的最终目标是提交SELECT语句查找数据行,而不是排除数据行。

    优化器试图排除数据行的原因在于它排除数据行的速度越快,那么找到与条件匹配的数据行也就越快。如果能够首先进行最严格的测试,查询就可以执行地更快。假设你的查询检验了两个数据列,每个列上都有索引:

    SELECT col3 FROM mytable WHERE col1 = ’some value’ AND col2 = ’some other value’;

    假设col1上的测试匹配了900个数据行,col2上的测试匹配了300个数据行,而同时进行的测试只得到了30个数据行。先测试Col1会有900个数据行,需要检查它们找到其中的30个与col2中的值匹配记录,其中就有870次是失败了。

    先测试col2会有300个数据行,需要检查它们找到其中的30个与col1中的值匹配的记录,只有270次是失败的,因此需要的计算和磁盘I/O更少。其结果是,优化器会先测试col2,因为这样做开销更小。

  • 相关阅读:
    otto-group-product-classification-challenge(Pytorch处理多分类问题)
    F1值
    win10 安装torch
    win10 安装 scrapy
    头条 街拍
    1029 Median
    欧拉回路
    Pre-Post
    Django 安装for Python3.4
    Python 安装for Windows
  • 原文地址:https://www.cnblogs.com/qcfeng/p/5997089.html
Copyright © 2011-2022 走看看