zoukankan      html  css  js  c++  java
  • 8.3.1 How MySQL Uses Indexes MySQL 如何使用索引

    8.3 Optimization and Indexes 优化和索引

    8.3.1 How MySQL Uses Indexes
    8.3.2 Using Primary Keys
    8.3.3 Using Foreign Keys
    8.3.4 Column Indexes
    8.3.5 Multiple-Column Indexes
    8.3.6 Verifying Index Usage
    8.3.7 InnoDB and MyISAM Index Statistics Collection
    8.3.8 Comparison of B-Tree and Hash Indexes

    最好的方式来改善SELECT 操作的性能是创建索引在1列或者多列上,这些列用在查询里。

    index entries 表现为指针指向表里的记录,允许查询快递的定位匹配WHERE 条件的记录,

    检索其他列的值,所有的MySQL 数据类型可以被索引:

    尽管它很容易的创建一个索引为每个可能的列,

    不必要的索引浪费空间和浪费时间来确定哪个索引被使用,

    indexes 也增加了插入,updates和delete 因为每个索引必须被更新,你必须找到正确的平衡点来

    实现快速的查询使用最佳的索引。

    8.3.1 How MySQL Uses Indexes MySQL 如何使用索引

    索引是用于快速查找特定列的记录。如果没有索引,

    MySQL 必须从第一行开始,然后读取整个表的行来找到相关的记录。

    表越大,成本越高。 如果表有一个索引对于查询的列, MySQL 能快速的确定位置

    来寻找表中间的数据,而不需要寻找所有的数据。 这个比读取每一行要快很多

    MySQL 大多数索引(PRIMARY KEY, UNIQUE, INDEX, and FULLTEXT) 是存储在B-trees,

    例外,索引在空间数据类型使用R-trees;内存表也支持hash 索引,

    通常,索引被使用在下面的讨论中:

    MySQL 使用索引用于三种操作:

    1.快速找到where 语句匹配的记录

    2.消除行,如果有一个选择在多个索引里,MySQL 通常使用那个找到最小记录数的索引(最有选择性的索引)

    3.如果表有一个多列索引,任何索引的最左边的前缀可以用于来优化查询记录。

    如果你有一个3列索引(col1, col2, col3), 你可以搜索功能在 (col1), (col1, col2), and (col1, col2, col3).

    从其他表检索数据党执行关联时, MySQL 可以使用索引在关联列上会更加有效,如果它们定义为相同的类型。

    在这样的背景下,VARCHAR 和CHAR 是被认为相同。

    非2进制字符列的比较, 两列应使用相同的字符集。

    比较不同的列(比较一个字符串列对于一个事件的或者数字的列)

    可能会阻止使用索引,如果值不能直接比较在不转换的情况下。

    对于一个给定的值比如1 在数字列, 它可能比较 任何数字的 值

    找到min()或者max()值对于一个页顶的索引列key_col, 这是被优化的通过预处理,

    检查你是否使用WHERE key_part_N=常数在所有的key parts.在这种情况下,

    MySQL 做一个单独的key 查找对于每个min(),max()表达式,用常值替换它。
    SELECT MIN(key_part2),MAX(key_part2)
    FROM tbl_name WHERE key_part1=10;

    要排序或者group 一个表 如果排序或者汇总在最左边前缀(比如,ORDER BY key_part1, key_part2).

    如果所有的key parts 是按DESC 排序,key会以相反的顺序读取。

    在某些情况下,查询可以优化来检索值在不需要咨询数据行( 一个索引提供提供所有需要的结果数据对于一个查询叫做覆盖索引)

    如果一个查询使用一个表的一列, 这列包含在某些索引中,选择的值可以从index tree中检索来提高速度

    SELECT key_part3 FROM tbl_name
    WHERE key_part1=1

  • 相关阅读:
    飞入飞出效果
    【JSOI 2008】星球大战 Starwar
    POJ 1094 Sorting It All Out
    POJ 2728 Desert King
    【ZJOI 2008】树的统计 Count
    【SCOI 2009】生日快乐
    POJ 3580 SuperMemo
    POJ 1639 Picnic Planning
    POJ 2976 Dropping Tests
    SPOJ QTREE
  • 原文地址:https://www.cnblogs.com/hzcya1995/p/13351427.html
Copyright © 2011-2022 走看看