何时使用CREATE INDEX以及何时使用USE INDEX

时间:2014-01-16 12:47:34

标签: android mysql sql sqlite

我在Android应用程序中使用SQLite,应该存储数千个音轨。我决定使用Track_title作为INDEX来加快选择和搜索速度。经过长时间阅读后,我从这个来源LINK了解到,INDEX会使SELECT更快,但会使INSERT变慢。他们建议在插入大数据之前从表中删除index,然后再将其重新放入。 使用以下语法:

CREATE INDEX my_idx ON my_table (my_attribute);

其他一些消息来源,建议您在执行index查询时使用select而不是从此LINK创建TABLE。使用以下语法:

SELECT * FROM my_table USE INDEX (col1)
WHERE col1= name;

问题是:哪种方法能给我带来更好的表现?什么是两者的优点和缺点?

1 个答案:

答案 0 :(得分:1)

这两者并不矛盾。除非已经创建了索引,否则不能使用索引。

你的桌子很小,只有几千行。我不担心表创建性能,除非您具体体验过。

索引的作用类似于书末的索引。如果要查找特定标题,引擎可以快速扫描索引并确定哪些数据记录包含该标题。在表中插入/更新/删除数据时会产生开销,因为必须维护索引。

当将数百万行插入表中时,这可能是一个很大的性能问题,尤其是空表。在这种情况下,您希望删除索引,然后在数据在表中后再次添加它。我们的想法是,引擎可以创建索引的速度快于它可以一行插入一行。

最后一点说明。在onwhereorder by中引用索引中的列时,查询通常会使用索引。在您的示例中,索引包含名为my_attribute的列,但查询引用col1。索引不会用于此查询。