对于这样一个几百万条的且在不断增长的库存表,我应该怎样为之设置索引才能达到最佳性能?

时间:2021-03-10 21:49:20
这样一个大库存表,主要的字段如下:
型号、品牌、产品类型(编码)、发布时间、发布者用户名

针对这个表的所有查询主要是两种:

1.以产品型号为核心的综合查询,
用户可以仅输入产品类型查某类型的产品,也可以同时选择品牌、产品类型及发布时间作为查询条件,这三个条件是可选的,而产品型号是必选的。注意:不管输入的查询条件为何,都以库存发布时间的降序排列;

2.以用户名为核心的查询。比如点击一个公司后,列出该公司的库存。同样,记录集的排序也是依发布时间的降序。

请问:我该怎样设计这个表索引?
群簇索引应该建立在用户名上?还是型号上?还是发布时间上?
请大家帮助我整体设计一下该表的索引的建立,不仅是群簇索引的设立的问题。多 谢大家!




9 个解决方案

#1


gz

#2


我想索引不是什么问题,关键是对索引的维护

#3


建索引是為了查詢性能,如果樓主的數據表很少用查詢的話,建多了索引反而影響速度。

參見:
1.確定數據表的操作是大量的查詢還是大量的增刪操作,以此確定使用索引的數目,較多增刪操作應嚴格限制索引數目,如果是較多查詢可以適當增加索引數目。
2.嘗試建立索引來幫助查詢。檢查自己的SQL語句,為在WHERE子句中出現的字段建立索引。使查詢引擎快速的定位到指定條件。
3.嘗試建立一些復合索引來進一步提高系統性能(修改復合索引將消耗更多的時間,且佔磁盤空間)
4.對小型表(記錄少)建立索引可能反而影響性能,因為此時對表掃描操作效率更高。(查詢優化器不能智能處理)
5.避免對具有較少值的字段建立索引(如性別)
6.避免選擇具有大型數據類型的列作為索引。

#4


我的这个库存表是经常被查询的。因为这是一个网站的库存,它每天都面对大量采购商的检索。另一方面这个库存表同时又是经常被插入的,因为不断有供应商在往库存表中上传自己的产品。
我也明白一些建索引的基本原则,可是一遇到具体的问题,就总是拿不定主意,因为这样做与那样做之间各有利弊,这样做有这样做的道理,那样做有那样做的好处。所以,我这只菜鸟基本上属于浮浅地了解一些理论,缺少实践经验的那种。设计任务所迫,需要高人明确的指点,请大侠们不吝赐教!

#5


你可以试一下:

在字段"用户名"上建索引.
在字段"发布时间"上建索引.
在字段"品牌"和"产品类型"建群簇索引.
因子用默认的80,因为你的表读写的频繁次数相当.

然后插入百万级数据测试.


#6


在字段"品牌"和"产品类型"建群簇索引.---顺序是”产品类型“在前,"品牌"在后。

#7


那型号呢?查询型号是一个相当频繁的操作。
型号上也建一个索引?
那是不是这样:

在字段"型号"上建索引.
在字段"用户名"上建索引.
在字段"发布时间"上建索引.
在字段"品牌"和"产品类型"建群簇索引.
因子用默认的80,因为你的表读写的频繁次数相当.

一共是四个索引,三个字段各建一个索引,两个字段建复合索引。

#8


避免對具有較少值的字段建立索引(如性別)

型号和品牌上不要单独建索引,因为取值不多。
可以将型号,品牌和其它关键字段建复合索引。

#9


我想以发布时间進索引

#1


gz

#2


我想索引不是什么问题,关键是对索引的维护

#3


建索引是為了查詢性能,如果樓主的數據表很少用查詢的話,建多了索引反而影響速度。

參見:
1.確定數據表的操作是大量的查詢還是大量的增刪操作,以此確定使用索引的數目,較多增刪操作應嚴格限制索引數目,如果是較多查詢可以適當增加索引數目。
2.嘗試建立索引來幫助查詢。檢查自己的SQL語句,為在WHERE子句中出現的字段建立索引。使查詢引擎快速的定位到指定條件。
3.嘗試建立一些復合索引來進一步提高系統性能(修改復合索引將消耗更多的時間,且佔磁盤空間)
4.對小型表(記錄少)建立索引可能反而影響性能,因為此時對表掃描操作效率更高。(查詢優化器不能智能處理)
5.避免對具有較少值的字段建立索引(如性別)
6.避免選擇具有大型數據類型的列作為索引。

#4


我的这个库存表是经常被查询的。因为这是一个网站的库存,它每天都面对大量采购商的检索。另一方面这个库存表同时又是经常被插入的,因为不断有供应商在往库存表中上传自己的产品。
我也明白一些建索引的基本原则,可是一遇到具体的问题,就总是拿不定主意,因为这样做与那样做之间各有利弊,这样做有这样做的道理,那样做有那样做的好处。所以,我这只菜鸟基本上属于浮浅地了解一些理论,缺少实践经验的那种。设计任务所迫,需要高人明确的指点,请大侠们不吝赐教!

#5


你可以试一下:

在字段"用户名"上建索引.
在字段"发布时间"上建索引.
在字段"品牌"和"产品类型"建群簇索引.
因子用默认的80,因为你的表读写的频繁次数相当.

然后插入百万级数据测试.


#6


在字段"品牌"和"产品类型"建群簇索引.---顺序是”产品类型“在前,"品牌"在后。

#7


那型号呢?查询型号是一个相当频繁的操作。
型号上也建一个索引?
那是不是这样:

在字段"型号"上建索引.
在字段"用户名"上建索引.
在字段"发布时间"上建索引.
在字段"品牌"和"产品类型"建群簇索引.
因子用默认的80,因为你的表读写的频繁次数相当.

一共是四个索引,三个字段各建一个索引,两个字段建复合索引。

#8


避免對具有較少值的字段建立索引(如性別)

型号和品牌上不要单独建索引,因为取值不多。
可以将型号,品牌和其它关键字段建复合索引。

#9


我想以发布时间進索引