ios - 如何为 iOS 加速或优化这个 SQLite 查询?
<p><p>我有一个非常简单的数据库结构。我在一个表中有 12 列,大多数是 varchar(<50),大约有 8500 行。</p>
<p>当我在 iPhone 4 上执行以下查询时,平均需要 2.5-3 秒才能得到结果:</p>
<p><code>SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20</code></p>
<p>似乎这种事情不应该这么慢。有趣的是,在第 2 代 iPod 上运行的同一个应用程序的相同查询要快约 1.5 秒。那部分超出了我的范围。</p>
<p>我还有其他有相同问题的查询:
<code>SELECT * FROM names WHERE SEX = ?1 AND ORIGIN = ?2 ORDER BY name COLLATE NOCASE ASC LIMIT 20</code></p>
<p>和</p>
<p><code>SELECT * FROM names WHERE name LIKE ?3 AND SEX = ?1 AND ORIGIN = ?2 ORDER BY name COLLATE NOCASE ASC LIMIT 20</code></p>
<p>等等</p>
<p>我在 SQLite db 上添加了一个索引:<code>CREATE INDEX names_idx ON names (name, origin, sex, meaning)</code> where <code>name</code>, <code>origin</code>、<code>sex</code> 和 <code>meaning</code> 是我倾向于使用 <code>WHERE</code> 和 <code>LIKE</code> 运算符查询的列。 </p>
<p>对提高这些搜索的性能有什么想法吗?或者这是否是原子性的?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>索引 <code>CREATE INDEX names_idx ON names (name, origin, sex, meaning)</code> 我相信,只有在您的查询包含所有这些列时才会使用。如果在查询中只使用了一些,则不能使用索引。</p>
<p>继续您的第一个查询:<code>SELECT * FROM names ORDER BY name COLLATE NOCASE ASC LIMIT 20</code> - 我建议单独在名称上添加索引,即 <code>CREATE INDEX names_idx1 ON名称(名称)</code>。从理论上讲,这应该会加快查询速度。</p>
<p>如果您想要其他索引与其他常见查询的组合列,这很公平,它可能会提高查询速度,但请记住它会增加您的数据库大小。</p></p>
<p style="font-size: 20px;">关于ios - 如何为 iOS 加速或优化这个 SQLite 查询?,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/9119835/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/9119835/
</a>
</p>
页:
[1]