讨论的效率选择PostgreSQL
我们在知识中见过这样的问题:MySQL查询如何从表中选择id(数百或数千ID)以提高效率修改
电子商务网站,商品属性表的记录,80m几十万,指数只有主密钥ID,如何做一个查询,如何提高效率
从id(数百或数千个ID)的表中选择*
这些ID不是规则和分散的。
看看答案,我觉得有很多不可靠的东西,但单靠语言是没有证据的。在我的电脑上,我写了几个测试查询。我用postgresql9.4,但觉得MySQL也应该是相似的,首先创建一个简单的表,只是一个简单的3列,下面这个问题很多人都提到要看表的大小,其实这个问题和表的大小,只有关于指数的大小,因为指数是建立在int,只有相关的记录数。
表公众。T9
柱型改性剂| |
-------- + ---------------- + -----------
C1的整数| |
C2的特点(100)| |
(200)| | C3特征
指标:
I独特的B树(C1)插入到T9值(generate_series(1000500000,1),重复(A,90),180);
然后一些产生随机数,以记对Linux Mac和舒夫
为((i = 0;i < 100000;i + +))
做
记:R 11000600000 > > rand.file
多恩
然后根据rand.file生成查询语句:
SELECT * FROM T9在C1(
494613,
575087,
363588,
527650,
251670,
343456,
426858,
202886,
254037,
…
一
);
分别生成3个SQL文件,其中的变量数分别为1001000和10000,并执行3个SQL文件以查看时间。
尝试研究F O test_100.sql psql / dev /空
日志:持续时间:2.879毫秒
尝试研究F O test_1000.sql psql / dev /空
日志:持续时间:11.974毫秒
尝试研究F O test_10000.sql psql / dev /空
日志:持续时间:355.689毫秒
你可以看到,数据的时间将有很大的变化时,数据是10000英寸内,但它只在超过300女士。
所以如果有一些答案,首先建立一个临时表,然后使用子查询,并希望这一次可以两表连接为了简单起见,我直接使用两个表连接。
t_tmp表;
创建表t_tmp(ID int);
插入t_tmp(ID)值
(494613),
(575087),
(363588),
(345980),…
(1);
选择从t_tmp T9,T9。
在t9.c1 = t_tmp.id;
时间怎么样
尝试研究F O test_create_10000.sql psql / dev /空
日志:持续时间:2.078毫秒
日志:持续时间:1.233毫秒
日志:持续时间:224.112毫秒
日志:持续时间:322.108毫秒
要删除掉和创建时间,它仍然需要500多个时间。这里的前提是我使用的SSD磁盘,所以写日志的时间会快得多,为什么这么慢呢请看一下解释,此时数据量较大,直接接受合并连接。
那1000行数据的效率如何呢
尝试研究F O test_create_1000.sql psql exp.out
日志:持续时间:2.476毫秒
日志:持续时间:0.967毫秒
日志:持续时间:2.391毫秒
日志:持续时间:8.780毫秒
100行的数据如下:
尝试研究F O test_create_100.sql psql / dev /空
日志:持续时间:2.020毫秒
日志:持续时间:1.028毫秒
日志:持续时间:1.074毫秒
日志:持续时间:1.912毫秒
可以看出,在100的值的情况下,1000个值的方式创建表并不比写所有的变量直接在要好的多,说明使用NLJ。但在一个更大的数据量(根据原来的问题,这里的数量是不可预测的)下的效率情况会较低,加上附加表的维护成本和多余的SQL语句,DBA肯定是不爱,仍然相信,在数据库中直接使用,大胆的列表来解决这些问题。
以上内容是针对效率选择PostgreSQL,希望对你有帮助!