我有一张包含大量数据的表格。我在该表中有9列(bp_detail)和1列ID,这是我表中的主键。所以我使用查询
获取数据select * from bp_detail
那么我需要做些什么来快速获取数据?我应该制作索引吗?如果是,那么在哪一列?
我也使用该表(bp_detail)进行内部连接,使用表(extras)来获取where子句的基础记录,我正在使用的查询是:
select * from bp_detail bp inner join extras e
on (bp.id = e.bp_id)
where bp.id = '4' or bp.name = 'john'
我通过在bp_detail id和extras bp_id上应用外键来加入这些表,所以在这种情况下我应该怎样做才能获得快速数据。现在我在extras表中列了“name”列。
指导非常有责任
答案 0 :(得分:0)
根据您的搜索条件,如果您只是选择所有数据然后主键就足够了,为了增强连接部分,您可以在e.bp_id
上创建索引,如果您共享表格可以帮助您更多模式
答案 1 :(得分:0)
如果选择所有记录,则无法通过索引任何列获得任何记录。索引使数据库引擎的过滤/排序更快。想象一下20000页的大书。通过章节名称和页码在第一页上编制索引,您可以快速浏览书籍。同样适用于数据库,因为它只不过是一个接一个地保存的记录集合。
您计划加入表格。在JOINING:
时进行过滤on (bp.id = e.bp_id)
并在WHERE中:
where bp.id = '4' or bp.name = 'john'
(无论如何,您使用ID和NAME过滤的任何理由?ID应该足够独特)。
通常表ID应该是主键,因此可以覆盖连接。如果您打算经常按名称过滤,请考虑在那里添加索引。您也应该检查how does database indexes work。
关于name
索引,查找速度取决于搜索类型。如果您打算使用=
平等搜索,那将非常快。使用右通配符也会非常快(例如。name = 'john%'
),但两侧的通配符相当慢(例如。name = '%john%'
)。
无论如何,你的数据库足够大吗?没有太多数据,如果您的应用程序不是读取密集型的,那么感觉就像初学者的错误称为过早优化。