【问题标题】:Is there a way to optimize a simple SQL request with a big database有没有办法用大数据库优化一个简单的 SQL 请求
【发布时间】:2020-08-14 19:55:51
【问题描述】:

我正在使用 SQLITE 和 Unity3D 来创建一个文字游戏。 我有一个包含所有现有单词(700k 单词)的大型数据库,我只想检查数据库中是否存在单词。

这是我的查询SELECT Word FROM Words WHERE Word = 'IA' COLLATE NOCASE 这大约需要 0.3599885 秒来执行 是否可以缩短请求的时间?

【问题讨论】:

  • 这似乎很快。我猜你已经在word 上有一个索引。如果没有,您可以添加一个,删除collate 看看是否更快。
  • 是的,我有一个所有单词的索引。我通常将单词存储在较低的位置,所以我尝试了 LOWER 并且它有效。谢谢

标签: sql sqlite unity3d optimization query-optimization


【解决方案1】:

好的,我刚刚发现COLLATE NOCASE 真的很慢。 我只是用LOWER() 代替 现在查询需要 0.0009974 秒

【讨论】:

    【解决方案2】:

    确保所有单词都以全部小写(或全部大写)存储在表格中。您可以使用CONSTRAINT 来确保这一点。然后你就不需要使用排序规则来查找单词了,这将使它变得非常快。

    例如:

    create table words (
      word varchar(50)
    );
    
    insert into words (word) values ('chicago'); -- always lower case
    insert into words (word) values ('ia');
    insert into words (word) values ('london');
    

    然后在列上创建索引:

    create index ix1 on words (word);
    

    现在,您可以快速搜索:

    select word from words where word = lower('IA');
    

    注意:请注意,LOWER() 函数应用于等式(值)的“右侧”。如果将其应用于列,则会导致查询变慢,因为您会阻止索引的使用。

    【讨论】:

      猜你喜欢
      • 2021-03-07
      • 2022-11-12
      • 1970-01-01
      • 2021-10-27
      • 1970-01-01
      • 2015-06-14
      • 1970-01-01
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多