如何索引我的SQL表?

时间:2016-04-21 16:05:52

标签: mysql indexing sqlite

我有两个表,第一个名为Hotel,包含以下列:

hotelID, AverageRating, OverallRating, URL

第二个名为Review,包含:

hotelID, Author, Content, Date, No. Reader, No. Helpful, Overall, Value, Rooms, Location, Cleanliness, Checkin / front desk, Service, Business Service

我被要求根据查询在表格上创建相关索引。以下是我的四个问题:

  • 查找同一用户的所有评论(即,给定用户ID,返回 所有评论的清单。)。
  • 查找评论数量大于2的所有用户 返回他们所评论的酒店名称和数量。
  • 查找评论数量大于10的所有酒店。
  • 查找总评分大于3且平均的所有酒店 清洁度大于或等于5(注意:使用“总体评级”属性)。

基于这些查询,我需要索引以下列(我认为):

  • 作者
  • OverallRating

我不需要对清洁度进行索引,因为这是一个平均值,因此索引将没有任何好处。

“作者”列包含审阅者的用户名。例如,Quoka7。是否最好按字母表对该列进行索引?

OverallRating列包含介于1.0和5.0之间的小数(至1 d.p)。例如,3.5。是否最好将此列索引到1 d.p?

最后,对hotelID列编制索引对我有好处吗?这基本上具有hotel_ *格式,其中*是每个酒店的唯一编号。根据我的疑问,我认为这不会有用。

感谢您的时间,如果您有任何疑问或需要更多信息,我就在这里。

更新

作者也可以从一个数字开始,所以也许字母不理想。

2 个答案:

答案 0 :(得分:2)

您在SQL中创建一个带有CREATE INDEX <nameOfIndex> ON <nameOfTable> (<field>,<field>,...);的索引,其中包含一个或多个字段。

首先查询CREATE INDEX Authors ON Review (Author);

的问题

看看你是否可以自己完成剩下的工作。如果您遇到困难,请尝试查看我们给出的演讲幻灯片并询问Google,您不能指望Stack Overflow继续为您完成大量的课程作业。

答案 1 :(得分:1)

首先,如果你有任何外键,那么在这些中使用的任何列都应该被绝对索引。 通常,您在关系的一侧有一个主键,在关系的另一侧有一个普通的索引。

关于您要索引的列,没有正确或正确的答案。 首先查看您要对数据执行哪些查询。如果您使用hotelID列进行大量查询,请将其编入索引。

您还可以计算查询运行的时间,然后查看索引是否会影响时间。 如果索引降低速度,那么你可以保留它!

关于索引类型,SQLite没有特定的索引类型(如上所述here)。