SQL-索引

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

> 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编码。
位图索引通常用于数据仓库,需哟啊大量的数据被索引,但是每个列却只包含相对少的值。

文本索引

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


如何使用索引

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


索引的不足

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值