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

时间:2018-01-13 14:43:42

标签: jquery mysql sql database search

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

根据两个案例查询一个记录超过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并忽略其他记录

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

2 个答案:

答案 0 :(得分:1)

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

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

如果您的商店名称很少且桌子不适合内存,那么您最终可能会遇到名为 thrashing 的情况。但是,除了这种情况之外,只有shopname的索引应该更快,但上面提到的索引是你真正想要的索引。

答案 1 :(得分:0)

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

当我从表中选择没有提到索引列值的数据时,通常需要花费大量时间来完成运行,有时可能会导致性能问题。

然而,当我在索引列中列出了具有完整范围的客户编号时,它神奇地变得更快!

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

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

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

然而,在所有情况下可能都不是这样,这取决于您的数据的设计方式......可能存在SQL1工作速度更快的情况,因为表空间扫描在第一页本身具有记录,而索引扫描具有到达商店然后获得产品。无论如何,要更好地使用SQL.2。

希望有所帮助:)