我草拟了一个网站的数据库布局,这个网站有可能在一分钟内变成100个查询。
我在考虑做以下事情:
用户表
ID
命名
(少数几个字段)
页面(这个会成为最大的一张桌子)
ID
Titel的
IMG
文字
restaurant(这将是将页面连接到用户表的行,我计划在此创建索引以提高速度)
所以我想知道是否为'restaurant'行创建一个索引会增加我的查询速度,或者是否还有其他方法来加快速度?
提前致谢!
答案 0 :(得分:2)
如果您需要执行以下查询:
select *
from pages
where restaurant = ...
或者喜欢:
select *
from user
inner join pages on pages.restaurant = user.id
where user.name = '...'
或restaurant
列上的任何其他条件,您可能希望在该列上添加索引,以避免扫描pages
表上的所有行。
但请注意,有用/必要的索引几乎总是取决于您将要执行的查询类型。
这意味着您无法准确地猜测您需要哪些索引 - 首先,您需要知道如何访问您的数据。
注意:您应该阅读MySQL手册的How MySQL Uses Indexes部分:它包含了解有趣的内容; - )
答案 1 :(得分:0)
作为测试,您始终可以在首选工具中运行查询,并在前面添加EXPLAIN
。这将显示正在使用的索引和/或必须创建的临时表等。
EXPLAIN select *
from pages
where restaurant = ...
答案 2 :(得分:0)
如果您正在使用InnoDB存储,则不应仅使用“索引”,而应使用FOREIGN KEY
。因此,您还将减少潜在的完整性问题。
建议:不要使用restaurant
作为名称。添加更多表格,很难跟踪什么参考。为什么不叫它user_id
? (但这是个人偏好的问题。)