我有一张包含以下列的表格:
(imageID, albumID, accountID, imageLoc, albumLoc, and uploadDate)
哪里
imageID
是每张图片的唯一标识符,albumID
是图片所属相册的标识符,accountID
是图片所属帐户的ID,imageLoc
是服务器上图像的位置,albumLoc
是相册中图片的位置(例如专辑的第3张图片)和uploadDate
是图片上传的日期。我猜我会将imageID
编入索引,因为这是最常被引用的内容,但我也会使用albumID
来查找相册中的所有图片,所以应该我也把它编入索引?
谢谢!
答案 0 :(得分:1)
除非你需要,否则不要索引。索引会降低插入和更新的速度。因此,通过添加SELECT
中未使用的索引或读取数据,您只是不添加任何值。
启用慢查询日志以查找需要一段时间才能运行的查询。使用这些标识的查询运行带有查询的EXPLAIN
语句并分析输出。
你正在通过猜测哪些不起作用来进行优化。当慢速查询没有使用索引时,explain的输出将显示。一旦确定了这些索引,就添加它们。
从未使用的索引会为数据库添加更多空间和更多操作,这会使速度变慢。
答案 1 :(得分:0)
虽然我部分同意Namphibian,但我不同意不要索引,除非你需要。用于连接目的的主ID的索引显然是您需要的索引。但是,如果您正在预测的查询也会定期使用您的相册ID,那么我会抢先获得一个索引(主要ID,相册ID),因此它将涵盖连接和查询条件。或者,根据情况,可能会更好(专辑ID,主要ID)..再次,根据查询条件的用途。