Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >我如何知道何时为列建立索引,以及使用什么索引?

我如何知道何时为列建立索引,以及使用什么索引?
EN

Stack Overflow用户
提问于 2010-11-04 03:59:34
回答 2查看 16K关注 0票数 25

在各种ORM的文档中,他们总是提供一种创建索引的方法,等等。他们总是提到要确保创建适当的索引以提高效率,就好像这是需要使用ORM的非手工编写的SQLer的固有知识。我对索引(PK之外)的理解基本上是:如果您计划根据列的内容进行LIKE查询(即搜索),则应该对该列使用全文索引。关于索引(主要是关于效率),我还应该知道什么?我感觉在我的门口有一个知识的世界,但是有一个巨大的折叠鼠标垫卡在它下面,所以我无法通过(我不知道为什么我觉得我需要这么说,但谢谢你提供了沙发)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-11-04 04:15:45

粗略地想一想索引,就像书后面的索引。这是一个与书籍内容完全不同的区域,如果你正在寻找一些特定的值,你可以转到索引并查找它(索引是有序的,所以在那里找到东西比扫描每一页书要快得多)。

索引条目有一个页码,因此您可以快速转到查找您的主题的页面。数据库索引非常类似;它是数据库中相关信息(索引中包含的字段)的有序列表,其中包含数据库查找匹配记录的信息。

所以..。当您有需要频繁搜索的信息时,可以创建索引。普通的索引对像like查询这样的“部分”查找没有帮助,但是当您需要获取一组字段X具有确定值的结果时,它们使DBMS不需要“扫描”整个表来查找匹配值。

当您需要对列进行排序时,它们也会有所帮助。

另一件需要牢记的事情是:如果DBMS允许您创建具有多个字段的单个索引,请务必针对您的DBMS调查这样做的影响。包含多个字段的索引可能只有在查询中使用所有这些字段时才是完全(或根本)有用的。相反,单个表有多个索引,每个索引有一个字段,对于按多个字段过滤/排序的查询可能没有太多(或任何)帮助。

您提到了全文索引和PKs (主键)。这些索引与常规索引不同,尽管它们通常具有相似的用途。

首先,请注意,主键通常是一个索引(在MSSQL中,实际上是一个“聚集索引”),但这不一定是特定的情况。例如,默认情况下,MSSQL PK是一个聚集索引;聚集索引的特殊之处在于,它们不是存储在其他地方的单独一位数据,而是数据本身在表中按聚集索引的顺序排列。这就是为什么流行的PK是一个int值,它是通过连续递增的值自动生成的。因此,聚集索引专门按照字段的值对表中的数据进行排序。将其与传统字典进行比较;词条本身是按“key”排序的,“key”是定义的单词。

但在MSSQL中(请查看DBMS文档中的信息),如果愿意,您可以将聚集索引更改为不同的字段。有时,这是在基于datetime的字段上完成的。

全文索引是完全不同种类的野兽。它们使用了一些相同的原则,但它们所做的与我所描述的普通索引并不完全相同。另外:在一些数据库管理系统中,LIKE查询不使用全文索引;需要特殊的查询操作符。

这些索引是不同的,因为它们的目的不是对列的整个值(一个数字、一个日期、一小段字符数据)进行查找/排序,而是在被索引的文本字段中查找单个单词/短语。

它们还经常能够搜索相似的单词、不同的时态、常见的错误拼写等,并且通常忽略干扰单词。它们的工作方式不同,这就是为什么它们也可能需要不同的运算符来使用它们。(同样,请检查DBMS的本地文档!)

票数 31
EN

Stack Overflow用户

发布于 2010-11-04 04:12:52

此答案特定于Oracle,但答案中的要点适用于大多数关系数据库系统

How to choose and optimize oracle indexes?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4093788

复制
相关文章
性能优化-如何选择合适的列建立索引
1、在where从句,group by从句,order by从句,on从句中的列添加索引 2、索引字段越小越好(因为数据库数据存储单位是以“页”为单位的,数据存储的越多,IO也会越大) 3、离散度大的列放到联合索引的前面
cwl_java
2020/02/13
2.1K0
性能优化-如何选择合适的列建立索引
MySQL索引的分类、何时使用、何时不使用、何时失效?
MySQL索引分为普通索引、唯一索引、主键索引、组合索引、全文索引。索引不会包含有null值的列,索引项可以为null(唯一索引、组合索引等),但是只要列中有null值就不会被包含在索引中。
PHP开发工程师
2021/05/21
8580
MySQL索引的分类、何时使用、何时不使用、何时失效?
MySQL 索引的分类、何时使用、何时不使用、何时失效?
blog.csdn.net/weixin_39420024/article/details/80040549
用户1516716
2021/03/23
1K0
联合索引(多列索引)[通俗易懂]
联合索引是指对表上的多个列进行索引,联合索引也是一棵B+树,不同的是联合索引的键值数量不是1,而是大于等于2.
全栈程序员站长
2022/09/05
2.6K0
列存储索引1:初识列存储索引
     2012以后提供了一种不同于传统B树结构的索引类型,就是内存列存储索引。这种索引应用了一种基于列的存储模式,也是一种新的查询执行的批处理模式,并且为特定的负载提供了巨大的性能提升。它是如何构建?如何工作?又是为什么能对性能有如此大的提升,接下来我们用简明的描述和详尽的示例来解释说明。      那么列存储索引究竟是什么?大多数时候,列存储索引被描述作为一种数据仓库和数据报表的功能。事实上,你最有可能就是在这种情况下利用这种索引。然而,即使在OLTP数据库中,你也会遇到一些要从大量数据表中获取数据的
用户1217611
2018/01/30
1.6K0
列存储索引1:初识列存储索引
Mysql合理建立索引,索引优化
在我们日常使用数据库的时候,肯定避免不了对数据库的优化。那么对数据库的优化又少了不索引的知识。
宣言言言
2019/12/15
4.8K0
Mysql合理建立索引,索引优化
用sql创建索引_sqlserver索引的建立与使用
1.创建普通索引 SQL CREATE INDEX 语法 在表上创建一个简单的索引。允许使用重复的值:
全栈程序员站长
2022/10/02
1.9K0
比较列存储索引与行索引
原因:     之前已经写过一篇关于列存储索引的简介https://cloud.tencent.com/developer/article/1032222,很粗糙但是基本阐明了列存储索引的好处。为了更好的理解列存储索引,接下来我们一起通过列存储索引与传统的行存储索引地对比2014中的列存储索引带来了哪些改善。由于已经很多介绍列存储,因此这里我仅就性能的改进进行重点说明。 测试场景     我创建了5个测试,尽量保证测试环境避免来自外界的重负载进而影响到结果。测试结果基于两个独立的表,分别是: FactTra
用户1217611
2018/01/30
1.6K0
比较列存储索引与行索引
「Mysql索引原理(五)」多列索引
很多人对多列索引的理解都不够。一个常见的错误就是,为每个列创建独立的索引,或者按照错误的顺序创建多列索引。
源码之路
2020/09/04
4.3K0
「Mysql索引原理(五)」多列索引
mysql 创建 主键索引 唯一索引 全文索引 多列索引 添加索引
ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` )
bear_fish
2018/09/19
6.2K0
MySQL索引算法原理以及常见索引的使用
B Tree指的是Balance Tree,也就是平衡树。平衡树是一颗查找树,并且所有叶子节点位于同一层,如下:
爱拼才会赢
2022/01/05
1.3K0
MySQL索引算法原理以及常见索引的使用
MySQL索引中的前缀索引和多列索引
正确地创建和使用索引是实现高性能查询的基础,本文笔者介绍MySQL中的前缀索引和多列索引。
玖柒的小窝
2021/11/06
4.4K0
索引失效的场景有哪些?索引何时会失效?
虽然你这列上建了索引,查询条件也是索引列,但最终执行计划没有走它的索引。下面是引起这种问题的几个关键点。
民工哥
2021/06/16
1.6K0
索引失效的情况有哪些?索引何时会失效?
我们在设计数据库表时,应该尽力避免NULL值出现,如果非要不可避免的要出现NULL值,也要给一个DEFAULT值,数值型可以给0、-1之类的, 字符串有时候给空串有问题,就给一个空格或其他。如果索引列是可空的,是不会给其建索引的,索引值是少于表的count(*)值的,所以这种情况下,执行计划自然就去扫描全表了。
终码一生
2022/04/14
6400
索引失效的场景有哪些?索引何时会失效?
来源:blog.csdn.net/bless2015/article/details/84134361
用户2242639
2021/11/04
5080
mysql建立联合索引_mysql之联合索引
create index `sindex` on `test` (`aaa`,`bbb`,`ccc`);
全栈程序员站长
2022/09/06
5K0
MongoDB 单键(列)索引
MongoDB支持基于集合文档上任意列创建索引。缺省情况下,所有的文档的_id列上都存在一个索引。基于业务的需要,可以基于一些重要的查询和操作来创建一些额外的索引。这些索引可以是单列,也可是多列(复合索引),多键索引,地理空间索引,文本索引以及哈希索引等。 本文主要描述在基于文档上的单列来创建索引。 一、创建语法 语法:db.collection.createIndex(keys, options) keys: 一个包含字段和值键值对的文档,指定该键即在该键上
Leshami
2018/08/13
1K0
MongoDB 单键(列)索引
为什么我使用了索引,查询还是慢?
经常有朋友问到:我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。
java进阶架构师
2020/11/04
5520
为什么我使用了索引,查询还是慢?
为什么我使用了索引,查询还是慢?
点击上方蓝色“程序猿DD”,选择“设为星标” 回复“资源”获取独家整理的学习资料! 作者 | 张飞洪 来源 | cnblogs.com/jackyfei/p/12122767.html 经常有同学问我,我的一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。 另外插入一个题外话,个人认为团队要合理的使用ORM,可以参考 ORM的权衡和抉择。合理利用的是ORM在面向对象和写操作方面的优势,避免联合查询上可能产生的坑(当然如果你的Linq查询能力很强另当
程序猿DD
2023/04/17
2290
为什么我使用了索引,查询还是慢?
为什么我使用了索引,查询还是慢?
经常有同学疑问,为什么有时候一个SQL语句使用了索引,为什么还是会进入到慢查询之中呢?今天我们就从这个问题开始来聊一聊索引和慢查询。
青阳
2022/02/07
1K0

相似问题

何时使用索引器,以及如何知道如何编写索引器

20

如何知道何时使用索引以及使用哪种类型的索引?

60

为文本列建立索引

30

何时以及为什么oracle索引无效?

22

MySQL我是否应该使用索引以及何时使用?

20
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文