关于几个配置参数的不解,请高手指点. 针对innodb表: select查询,通过索引树找到数据库的物理地址数据.然后返回数据.(以下返回,有点疑问)              1.read_buffer_size 或 read_rnd_buffer_size
 (这个参数是在innodb里面用来设置一次性读取多少物理地址数据的吗?直接跟I/O打交道?读一次I/O 加1?)
      
                            ↓ 
                            ↓
                            ↓
             2.innodb_buffer_pool_size
 (这个参数是接受第1步 传过来的数据,放到里面吗? 还是在InnoDB里面直接与I/O打交道.不需要第1步的数据?)
 (如果这个参数的数据装满,把数据放到第3步?)
                            ↓
                            ↓
                            ↓
             3.tmp_table_size
  (这个参数是接受第2步 传过来的数据,放到这个里面吗?)
 (这一步,附加一个问题:我把tmp_table_size设置为500M时(整个数据库也没有500M). 为什么在查询较大的
  数据时.这个Created_tmp_disk_tables为什么还是要+1呢?我认为内存足够用了,为什么还要创建磁盘表?)
                            ↓
                            ↓
                            ↓
             4.sort_buffer_size
  (如果有排序,这个参数是接受第3步的数据吗?如果它不够?怎么办?)
                            ↓
                            ↓
                            ↓
  在请问一下,以上返回步骤正确吗?  
  额。随便在问一个吧  join_buffer_size 在全连接的时候给每个线程创建。
  我想问的是:join_buffer_size里面装的是什么数据。 2个表连接起来的数据吗? 如果是这样。是否应该把这个值设置
  的很大为好?                            
          

解决方案 »

  1.   

                 1.read_buffer_size 或 read_rnd_buffer_size
     (这个参数是在innodb里面用来设置一次性读取多少物理地址数据的吗?直接跟I/O打交道?读一次I/O 加1?)

    是的,MYSQL一次性从磁盘文件中读取多少字节的数据。这样可以避免你顺序地每读一个记录都去进行一次磁盘IO。
    这个参数不是INNODB的,是对于整个MYSQL的。             2.innodb_buffer_pool_size
     (这个参数是接受第1步 传过来的数据,放到里面吗? 还是在InnoDB里面直接与I/O打交道.不需要第1步的数据?)
     (如果这个参数的数据装满,把数据放到第3步?)

    与read_buffer_size 或 read_rnd_buffer_size无关,这个是存放数据和索引的缓存。如果缓存中数据已经有了,则MYSQL INNODB则不需要到进行磁盘IO,直接从缓存中取数据即可。 这个缓存是根据LRU原则来进行调度管理的。
      

  2.   

                 3.tmp_table_size
      (这个参数是接受第2步 传过来的数据,放到这个里面吗?)
     (这一步,附加一个问题:我把tmp_table_size设置为500M时(整个数据库也没有500M). 为什么在查询较大的
      数据时.这个Created_tmp_disk_tables为什么还是要+1呢?我认为内存足够用了,为什么还要创建磁盘表?)

    与其它刚才提到的参数无关。是创建内存临时表的字节限制。如果MYSQL自己需要创建的临时表很大,超过这个定义,则会创建临时的MYISAM表。             4.sort_buffer_size
      (如果有排序,这个参数是接受第3步的数据吗?如果它不够?怎么办?)

    如果 第3项中有ORDER BY,则会使用到这个参数的限制。 使用这个内存进行排序操作,如果不够则生成磁盘临时文件。
      

  3.   

    我想问的是:join_buffer_size里面装的是什么数据。 2个表连接起来的数据吗? 如果是这样。是否应该把这个值设置
      的很大为好?
    两 表JOIN时存储它们的相关列到这个BUFFER, MYSQL中对这个BUFFER使用的算法如下。for each row in t1 matching range {
      for each row in t2 matching reference key {
        store used columns from t1, t2 in join buffer
        if buffer is full {
          for each row in t3 {
            for each t1, t2 combination in join buffer {
              if row satisfies join conditions,
              send to client
            }
          }
          empty buffer
        }
      }
    }if buffer is not empty {
      for each row in t3 {
        for each t1, t2 combination in join buffer {
          if row satisfies join conditions,
          send to client
        }
      }
    }
      

  4.   


    那请问innodb_buffer_pool_size里面的数据,也是直接从物理磁盘中过去吗?直接使用I/O?(如果不是,请问这个参数的数据怎么得到 )  
    我想不会吧。因为read_buffer_size 或 read_rnd_buffer_size也是从磁盘读数据...2个参数都去读???不会吧....
      

  5.   


    for each t1, t2 combination in join buffer
    如果这个地方把join_buffer_size 填充满了..
    请问.也要建立临时表吗? myisam的?