搜索一列没有索引或其中两列有索引

Posted

技术标签:

【中文标题】搜索一列没有索引或其中两列有索引【英文标题】:search by one column without index or two one of them has index 【发布时间】:2018-06-22 18:45:15 【问题描述】:

我想根据您的经验知道哪种情况更快

查询超过1000万条记录的表,分两种情况:

search1 在单个 product_id 列上 search2 两列 shop_name(已编入索引)和 product_id

原来是这样的

search1 =    select * from table where product_id = 123456

search 2 = select * from table where shopname ='abz' and product_id = 123456 

第二次搜索有店名索引

哪一个会更快?

如果我了解索引的工作原理,第二个会更快

因为它只会搜索 shopname ='abz' 的 id 而忽略其他记录

这是正确的还是我遗漏了什么

【问题讨论】:

始终尽量避免查询未编入索引的列表。所以也索引product_id @juergen d 据我所知,索引过多会减慢插入和删除速度。那么您是否建议将其中 2 个编入索引?它会影响插入,因为我每天向该表插入太多数据或其中一个列 id 足够? 【参考方案1】:

对于您的两个查询,最佳索引是table(product_id, shopname)。这个索引可以被两个where 子句完全使用。

如果您拥有的唯一索引位于shopname,那么在大多数情况下,第二个查询应该更快。也就是说,product_id 不在索引中,也不属于主键。

如果您的店铺名称很少,并且表格无法放入内存,那么您最终可能会遇到一种称为抖动的情况。但是,除此之外,仅shopname 上的索引应该更快,但上面提到的索引似乎是您真正想要的。

【讨论】:

在我的情况下,shopname 将重复多次,从 100 到无限次,因为每个商店可以有很多产品,但是对于 product_id,它对所有商店都是唯一的,你建议使用多列索引表(product_id , shopname) 正如你所提到的? @JoumanaIssa 。 . .是的,如果这些是您想要运行的查询,您应该使用多列索引。【参考方案2】:

根据我的经验,这是我在 RDBS SELECT SQL 中实际看到的:

当我从没有提及索引列值的表中选择数据时,通常需要很长时间才能完成运行,有时可能会导致性能问题。

但是,当我在索引列中包含完整范围的客户编号时,它神奇地运行得更快!

所以,我的答案是使用 SQL.2,因为它更快。

SQL.1) sql 引擎不知道从哪里开始,所以它会进行表空间扫描。

SQL.2) sql 引擎有一些东西可以启动,它会执行索引扫描,这在实用性上更快。

然而,在所有情况下可能都不是这样,这取决于您的数据是如何设计的......可能存在 SQL.1 工作得更快的情况,因为表空间扫描在第一页本身有记录,而索引扫描有伸手到商店,然后得到产品。无论如何,对于一个整体高效的解决方案来说,SQL.2 会更好。

希望对你有帮助:)

【讨论】:

以上是关于搜索一列没有索引或其中两列有索引的主要内容,如果未能解决你的问题,请参考以下文章

ORACLE:强制喜欢使用索引? [重复]

使用pandas创建稀疏矩阵,并使用来自.dat文件的其他两列的索引[x,y]的.dat文件的一列中的值填充它

sql server 2005 一个索引多个字段,字段的排列顺序对搜索有啥影响??

如何将EXCEL表格中的同一列有相同的内容 合并成一个单元格?

索引如何加快搜索速度? [复制]

如何将EXCEL表格中的同一列有相同的内容 合并成一个单元格