`

在 MySQL 中使用 index [轉載]

阅读更多

轉載於: http://chensh.loxa.edu.tw/php/C_7.php

在 MySQL 中使用 index 時,下列是一些該注意的事:

  • 在 MySQL 裡,將欄位設為 Primary 或 Unique 時,都同時具有 index 的效果。
  • 欲設為 index 的欄位長度是越短越好,這樣在維護 index table 時會快速一些;像 BLOB 與 TEXT 這類巨無霸型的資料型態,雖然在 MySQL 3.23.2 版之後也可以被設為 index 了,但還是少用為妙。
  • 欲設為 index 的欄位長度若是固定的話,會比變動的來得好。例如:同樣被設為 index,char(10) 的欄位,就比 varchar(10) 好。
  • 將多個欄位複合成為一組 index key 的話,要注意先後順序。例如:將「A+B+C」設為 index 時,下列的 SELECT 敘述將會使用到 index:
    SELECT * FROM tbl_name WHERE A = val1;
    SELECT * FROM tbl_name WHERE A = val1 AND B = val2;
    SELECT * FROM tbl_name WHERE A = val1 AND B = val2 AND C = val3;

    但像以下這樣的 SELECT 敘述將不會享受到 index 的好處:
    SELECT * FROM tbl_name WHERE B = val2;
    SELECT * FROM tbl_name WHERE C = val3;
    SELECT * FROM tbl_name WHERE B = val2 AND C = val3;
  • 當您使用「LIKE」參數時,若將萬用字元(%)置於關鍵詞後方,可以使用到 index;
    select * from tbl_name where key_col LIKE "Patrick%";
    若置於關鍵詞前方的話,則 index 不會起作用。
    select * from tbl_name where key_col LIKE "%Patrick%";

EXPLAIN
 如果想知道每個 SELECT 敘述是否充分運用 index 的話,您可以試試使用「EXPLAIN」。當您 SELECT 敘述句之前加上「EXPLAIN」時,將可以看到 MySQL 對它的處理原則,包括「是否使用 index」等資訊。
score
SNum SName Score 75312 Chen 80 75524 Chuang 95 75207 Yeh 92 75302 Lee 90 75101 Chuang 89 75303 Ho 90 75120 Lin 92 75313 Chen 88
addressSNum Address 75312
高雄縣鳳山市五甲二路 424 號
 以上方的 score 表為例,我們將其中的「SNum」欄位設為 index key,請看 EXPLAIN 的用法與結果:  【例一】EXPLAIN SELECT * from score WHERE SNum = '75312';  【例二】EXPLAIN SELECT * from score WHERE SNum LIKE '753%';  【例三】EXPLAIN SELECT * from score WHERE SName LIKE '%531%';  【例四】EXPLAIN SELECT * from score WHERE SName = 'Chen';  【例五】EXPLAIN SELECT * FROM score LEFT JOIN address ON score.SNum = address.SNum WHERE score.SNum = '75312';
 我們來看看這些結果代表什麼意思:
  • table
    表示所引用的表格名稱。
  • type
    表示查詢時的「聯結類型」(join type),以下依序是「最佳」至「最差」的各種類型:
    • system
      表格中僅有一列。這是 const 類型的一個特例。
    • const
      表格中符合條件的只有一列。因為僅有一列,其值在後續的查詢中可被視為常數。
    • eq_ref
      表示在與其它表格的資料列結合時,此表格只有一列會被讀取。當 join 使用到資料表中的所有索引,並索引是 UNIQUE 或 PRIMARY KEY 時才會被用到。
    • ref
      表 示在與其它表格的資料列結合時,此表格中所有符合的資料列都會被讀出來。這是當 join 只使用到部份鍵值(註),或此鍵非 UNIQUE 或 PRIMARY KEY 時才會用到(依照 join 的條件仍然無法選定單一目標列)。若因此符合的資料列數不多的話,它也算是一種不錯的「聯結類型」。
      註:我們指定「A+B」欄位為 index key,但查詢時只用到「A」欄位。
    • range
      表示將在一定範圍內執行搜尋的動作。
    • index
      與 ALL 相同,但只有 index table 會被瀏覽。這通常比 ALL 快,因為 index table 通常比原始資料表來得小。
    • All
      表示這項查詢將對整個原始資料表瀏覽一遍,是最不好的類型。
  • possible_keys
    表示 MySQL 能夠藉由哪些 index 來搜尋目標。
  • key
    表示 MySQL 實際藉由哪個 index 來搜尋目標。
  • key_len
    表示 MySQL 實際使用的 key 長度。若 index key 是由兩個欄位以上複合而成的話,您可以在此看見 MySQL 使用了 index 的多少部份。
  • ref
    表示哪個欄位(或常數)將被用來與 key 一起比對。
  • rows
    表示 MySQL 粗略估計在查詢的過程中,必須瀏覽的資料列數。
  • Extra
    顯示 MySQL 在解決這項查詢工作時的一些附加訊息。例如:「where used」表示 where 子句將會限制某些資料列的輸出。
分享到:
评论

相关推荐

    MYSQL培训经典教程(共两部分) 1/2

    MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2统计字段值的数目 82 4.1.3 计算字段的平均值 83 4.1.4 计算字段值的和 84 4.1.5 计算字段值的极值 84 4.1.6 总结 86 4.2 操作...

    MYSQL培训经典教程(共两部分) 2/2

    MYSQL高级特性 81 4.1 集合函数 82 4.1.1 行列计数 82 4.1.2统计字段值的数目 82 4.1.3 计算字段的平均值 83 4.1.4 计算字段值的和 84 4.1.5 计算字段值的极值 84 4.1.6 总结 86 4.2 操作...

    zZ笨笨多用户博客程序 v1.0 GBK.rar

    数据库文件可以直接导入,数据库配置文件index.php,请在导入前建立好数据库文件夹2012zzblog。 本程序是梦想网络采用speedphp框架、MVC模式、ACL权限控制。是一个开源的PHP MYSQL多用户博客程序。 基本原理就是...

    zZ笨笨多用户博客程序 v1.0 GBK

    数据库文件可以直接导入,数据库配置文件index.php,请在导入前建立好数据库文件夹2012zzblog。本程序是梦想网络(www.mxszpt.com)采用speedphp框架、MVC模式、ACL权限控制。是一个开源的PHP+MYSQL多用户博客程序。...

    springmybatis

    查询出列表,也就是返回list, 在我们这个例子中也就是 List<User> , 这种方式返回数据,需要在User.xml 里面配置返回的类型 resultMap, 注意不是 resultType, 而这个resultMap 所对应的应该是我们自己配置的 ...

    asp.net知识库

    在ASP.NET中使用WINDOWS验证方式连接SQL SERVER数据库 改进ADO.Net数据库访问方式 ASP.NET 2.0 绑定高级技巧 简单实用的DataSet更新数据库的类+总结 [ADO.NET]由数据库触发器引发的问题 为ASP.NET封装的SQL数据库...

    基于ssm框架开发简单的婚恋相亲网站,包括前台和后台管理系统

    基于ssm的相亲网,仅供参考,转载代码请表明最代码地址和作者-程序猿全敏 运行环境 jdk7+tomcat7+mysql+eclipse 项目技术(必填) spring+spring mvc+mybatis+jquery http://localhost:8080/qt/index.jsp 管理员后台 ...

    PHPnow 绿色安装包

    PHPnow 绿色安装包,转载自http://phpnow.org/index.php

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part2

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part5

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part4

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

    JAVA WEB 开发详解:XML+XSLT+SERVLET+JSP 深入剖析与实例应用.part3

    13.2 在jsp中使用javabean 412 13.2.1 [jsp:usebean] 412 13.2.2 [jsp:setproperty] 413 13.2.3 [jsp:getproperty] 414 13.2.4 示例 414 13.3 网上书店程序 418 13.4 小结 440 第14章 jsp开发的两种模型 441 ...

Global site tag (gtag.js) - Google Analytics