zoukankan      html  css  js  c++  java
  • B-Tree索引

    翻译自http://dev.mysql.com/doc/refman/5.6/en/index-btree-hash.html

    理解B-Tree和Hash的数据结构能够帮助我们预测不同存储引擎下的查询性能差异。存储引擎在索引中使用这些数据结构,尤其是MEMORY 同时提供了B-Tree和Hash索引让你选择。

    B-Tree索引特性

     

    B-Tree索引可以在表达式中使用=, >, >=, <, <=用作列比较或者 BETWEEN 运算符。还能使用LIKE比较,如果参数是一个不以通配符开头的常量。举个例子,下面的SELECT语句使用了索引:

    SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';

    SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

    第一条语句中,只有'Patrick' <= keycol < 'Patricl' 的行会被考虑。第二条语句中,只有'Pat' <= keycol < 'Pau' 的行会被考虑。

    下面的SELECT语句没有使用索引:

    SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%';

    SELECT * FROM tbl_name WHERE key_col LIKE other_col;

    第一条语句是因为它以通配符开头,第二条语句是因为没有使用常量。

    如果你使用... LIKE '%string%'而且string超过三个字符,那么MYSQL会使用Turbo Boyer-Moore algorithm算法来初始化查询表达式,然后用这个表达式来让查询更迅速。

    查询中有colname IS NULL可以使用colname索引。

    任何一个没有覆盖所有WHERE中AND级别条件的索引是不会被使用的。也就是说,要使用一个索引,这个索引中的第一列需要在每个AND组中出现。

    下面的WHERE条件会使用索引:

    ... WHERE index_part1=1 AND index_part2=2 AND other_column=3

     

        /* index = 1 OR index = 2 */

    ... WHERE index=1 OR A=10 AND index=2

     

        /* optimized like "index_part1='hello'" */

    ... WHERE index_part1='hello' AND index_part3=5

     

        /* Can use index on index1 but not on index2 or index3 */

    ... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;

    下面的WHERE条件不会使用索引:

        /* index_part1 is not used */

    ... WHERE index_part2=1 AND index_part3=2

     

        /*  Index is not used in both parts of the WHERE clause  */

    ... WHERE index=1 OR A=10

     

        /* No index spans all rows  */

    ... WHERE index_part1=1 OR index_part2=10

    有时候mysql不会使用索引,即使在可用的情况下。例如当mysql预估使用索引会读取大部分的行数据时。(在这种情况下,一次全表扫描可能比使用索引更快,因为它需要更少的检索)。然而,假如语句中使用LIMIT来限定返回的行数,mysql则会使用索引。因为当结果行数较少的情况下使用索引的效率会更高。

  • 相关阅读:
    【WinAPI】User32.dll注释
    Unity 用ml-agents机器学习造个游戏AI吧(1) (Windows环境配置)
    Unity C#笔记 容器类
    Unity C#笔记 委托/事件/Action/Func/Lambda表达式
    Unity C#笔记 协程
    游戏AI之模糊逻辑
    游戏AI之路径规划
    游戏设计模式——黑板模式
    游戏AI之决策结构—行为树
    游戏AI之感知
  • 原文地址:https://www.cnblogs.com/dassmeta/p/5360155.html
Copyright © 2011-2022 走看看