SQL-索引

作者: Manfestain | 来源:发表于2019-12-01 12:14 被阅读0次

    当向表中插入一行数据时,数据库服务器不会试图将数据放到表中的特定位置。因此当查询时,服务器需要通过检查表中的每一行来完成查询。
    当表中的数据过大时,服务器不能在合适的时间内完成查询,但是可以通过建立一个或多个索引来完成。

    > ALTER TABLE department ADD INDEX dept_name_idx (name);
    这个语句为department.name创建了索引,并将该索引命名为dept_name_idx。
    > SHOW INDEX FROM department
    查看表中的所有索引

    当表被创建时,服务器会自动为主键列生成索引,生成索引名为PRIMARY。

    > ALTER TABLE department DROP INDEX dept_name_idx;

    索引可以有以下作用:

    • 提供常规索引
    • 作为一种机制限制索引列出现重复值。

    索引类型

    不同类型的数据需要不同的索引策略。

    B树索引

    B树索引以树结构组织,它又一个或多个分支节点,分支节点指向单级的叶节点,分支节点用于遍历树,叶节点则保存真正的值和位置信息。
    当向表中插入、更新和删除数据时,服务器会尽力保持树的平衡。通过保持树的平衡,不需要遍历多层分支节点,服务器就能快速地到达叶节点查找到需要的值。

    位图索引

    虽然B树索引擅长于处理包含许多不同值的列(比如客户的姓氏/姓名),但是在处理允许少量不同值的列是会变得很难用。

    总共有8类产品,有些产品会越来乐手欢迎,客户数目的增长会使得B树索引很难继续维持平衡。

    对于那些包含少量值却占据了大量行的列,可以使用位图索引。有点类似于One-Hot编码。
    位图索引通常用于数据仓库,需哟啊大量的数据被索引,但是每个列却只包含相对少的值。

    文本索引

    当数据库中存储文档,那么可能需要语序用户在文档中查找单词或者查找短语。但是又不希望每次请求搜素服务器都打开每个文档,然后扫描需要的文档。这时候就使用文本索引。


    如何使用索引

    服务器通常先使用索引快速定位特定表中的行,之后再访问相关表提取用户请求的补充信息。如果索引包含满足查询的所有内容,那么服务器就不必访问相关的表了。


    索引的不足

    每个索引事实上都是一个表(一种特殊的表),每次对表添加或者删除行时,表中的所有索引必须修改,当更新行时,收到影响的列的任何索引也必须被修改。因此索引越多,服务器级需要多越多的工作来保持所有模式对象最新。
    仅当出现清晰需求时才添加索引,运行程序,删除索引,下次需要时再重复一遍。

    相关文章

      网友评论

        本文标题:SQL-索引

        本文链接:https://www.haomeiwen.com/subject/durywctx.html