假设我有一些股票市场数据,包含以下字段
股票,日期,出价,要求
我最常见的查询将是以下类型
其中STOCK = ... AND DATE = ... AND BID = ...
与
一起其中STOCK = ... AND DATE = ... AND ASK = ...
我正在考虑的两个主要选项是:
1. Indexing
a) STOCK, DATE, BID
b) STOCK, DATE, ASK
2. Indexing
a) STOCK, DATE
b) BID
c) ASK
我不确定如何在两者之间做出选择
答案 0 :(得分:1)
您应该使用满足WHERE子句的索引,即您提供的第一个选项。
在第二组索引中,b)和c)不太可能被使用。 a)将被使用,但性能将低于1中列出的那些索引。
值得注意的是,大多数DBMS很少使用多个索引来满足单个表中的选择 - 所以当涉及到股票/日期的索引,而另一个关于出价的时候,如果合适的话,将使用一个或另一个 - 但不是两个。
答案 1 :(得分:1)
如果日期是针对BID而ASK是相同的日期,我会将它们放在一个表格中 - 当您的表格较少时,它会更简单,更容易。
它也可以使这样的查询成为可能:
select * from my_table where ask - bid > 5
创建这些索引以适合where子句:
create index idx1 on my_table(stock, date, bid);
create index idx2 on my_table(stock, date, ask);