• 在SQLite中使用索引优化查询速度


    在进行多个表联合查询的时候,使用索引可以显著的提高速度,刚才用SQLite做了一下测试。

    建立三个表:

    create table t1 
    (id integer primary key,
    num integer not null,
    word1 text not null,
    word2 text not null);
    create table t2 
    (id integer primary key,
    num integer not null,
    word1 text not null,
    word2 text not null);
    create table t3 
    (id integer primary key,
    num integer not null,
    word1 text not null,
    word2 text not null);



    建立若干索引:
    t1表:在num,word1,word2上有复合索引
    t2表:在num,word1,word2上各有一个索引
    t3表:在word1上有一个索引

    create index idxT1 on t1(num,word1,word2);
    create index idxT2Num on t2(num);
    create index idxT2Word1 on t2(word1);
    create index idxT2Word2 on t2(word2);
    create index idxT3Word1 on t2(word1);



    向三个表中各插入10000行数据,其中num项为随机数字,word1和word2中是英文单词,三个表中对应的num,word1和word2列中都包含有部分相同值,但是它们在表中出现的顺序不同。

    速度测试结果:

    1) select count(*) from t1,t3 where t1.word2=t3.word2; 
    很慢(t3.word2上没有索引)
    2) select count(*) from t3,t1 where t1.word2=t3.word2; 
    很慢(t1.word2上没有独立索引)
    3) select count(*) from t1,t2 where t1.word2=t2.word2;
    很快(t2.word2上有索引)
    4) select count(*) from t2,t1 where t1.word2=t2.word2; 
    很慢(t1.word2上没有独立索引)
    5) select count(*) from t1,t2 where t1.num=t2.num;
    很快(t2.num上有索引)
    6) select count(*) from t2,t1 where t1.num=t2.num; 
    很快(t1的复合索引中,第一个列是num)
    7) select count(*) from t1,t3 where t1.num=t3.num; 
    很慢(t3.num上没有索引)
    8) select count(*) from t3,t1 where t1.num=t3.num; 
    很快(t1的复合索引中,第一个列是num)



    结论:在from子句后面的两个表中,如果第2个表中要查询的列里面带有索引,这个查询的速度就快,反之就慢。比如第三个查询,from后面的第2个表是 t2,t2在word2上有索引,所以这个查询就快,当输入SQL命令并回车后,查询结果就立即显示出来了,但是如果使用第4个查询命令(即把t1和t2 的位置互换),查询起来却用了1分零6秒。

    可见索引的建立对于提高数据库查询的速度是非常重要的。

    更多关于SQLite查询优化的知识可以参考《Chris Newman》写的《SQLite》一书的第四章:《Query Optimization》

  • 相关阅读:
    C# 重绘图片.图片加字,加矩形,加圆,加线,根据XY坐标修改RGB
    Net5 WorkService 继承 Quarzt 以及 Net5处理文件上传
    select高级用法之各种连接
    mysqladmin客户端命令详解
    Mysql 配置文件管理
    kubeadm 部署的etcd集群管理
    数据库客户连接管理及配置文件
    Mysql 用户创建及授权管理
    在k8s 1.19+版本中部署traefik 2.X版本 ingress控制器
    JS 关闭页面窗口通用方法,兼容各个浏览器
  • 原文地址:https://www.cnblogs.com/rosepotato/p/3394195.html
Copyright © 2020-2023  润新知