繁体   English   中英

如何索引我的SQL表?

[英]How can I index my SQL table?

我有两个表,第一个表叫做Hotel,包含以下几列:

hotelID, AverageRating, OverallRating, URL

第二个称为“评论”,其中包含:

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

我被要求根据查询在表上创建相关索引。 这是我的四个查询:

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

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

  • 作者
  • 综合评分

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

作者列包含审阅者的用户名。 例如Quoka7。 也许最好按字母索引此列?

TotalRating列包含1.0到5.0之间的一个十进制(至1 dp)。 例如3.5。 也许最好将此列索引为1 dp?

最后,为hotelID列建立索引对我来说是否有益? 基本上,其格式为hotel_ *,其中*是每个酒店的唯一编号。 根据我的查询,我认为这没有用。

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

更新

作者也可以以数字开头,因此也许字母并不理想。

您可以使用CREATE INDEX <nameOfIndex> ON <nameOfTable> (<field>,<field>,...);在SQL中CREATE INDEX <nameOfIndex> ON <nameOfTable> (<field>,<field>,...); 一个或多个字段。

因此,对于第一个查询, CREATE INDEX Authors ON Review (Author);

看看您是否可以自己做剩下的事情。 如果您遇到麻烦,请尝试浏览我们提供的讲义并询问Google,您不能指望Stack Overflow会继续为您完成很多大学课程。

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

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

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

至于索引类型,SQLite没有特定的索引类型(如注意这里 )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM