WEB开发网
开发学院数据库MySQL MySQL性能优化全攻略- 相关数据库命令 阅读

MySQL性能优化全攻略- 相关数据库命令

 2008-12-19 11:14:18 来源:WEB开发网   
核心提示: SELECT命令中出现的表定义如下:※表定义表 列 列类型tt ActualPC CHAR(10)tt AssignedPC CHAR(10)tt ClientID CHAR(10)et EMPLOYID CHAR(15)do CUSTNMBR CHAR(15)※索引表 索引tt Actu

SELECT命令中出现的表定义如下:

※表定义

表 列 列类型

  tt ActualPC CHAR(10)
  tt AssignedPC CHAR(10)
  tt ClientID CHAR(10)
  et EMPLOYID CHAR(15)
  do CUSTNMBR CHAR(15)

※索引

表 索引

  tt ActualPC
  tt AssignedPC
  tt ClientID
  et EMPLOYID (主键)
  do CUSTNMBR (主键)
  

※tt.ActualPC值分布不均匀

在进行任何优化之前,EXPLAIN对SELECT执行分析的结果如下:

  table type possible_keys key key_len ref rows Extra
  et ALL PRIMARY NULL NULL NULL 74
  do ALL PRIMARY NULL NULL NULL 2135
  et_1 ALL PRIMARY NULL NULL NULL 74
  tt ALL AssignedPC,ClientID,ActualPC NULL NULL NULL 3872
  range checked for each record (key map: 35)

每一个表的type都是ALL,它表明MySQL为每一个表进行了完全连接!这个操作是相当耗时的,因为待处理行的数量达到每一个表行数的乘积!即,这里的总处理行数为74 * 2135 * 74 * 3872 = 45,268,558,720。

这里的问题之一在于,如果数据库列的声明不同,MySQL(还)不能有效地运用列的索引。在这个问题上,VARCHAR和CHAR是一样的,除非它们声明的长度不同。由于tt.ActualPC声明为CHAR(10),而et.EMPLOYID声明为CHAR(15),因此这里存在列长度不匹配问题。

为了解决这两个列的长度不匹配问题,用ALTER TABLE命令把ActualPC列从10个字符扩展到15字符,如下所示:

mysql > ALTER TABLE tt MODIFY ActualPC VARCHAR(15);

Tags:MySQL 性能 优化

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接