我的表ArchiveArseh
大小为15GB,行记录为198997,其中包含引擎innoDB(以及将来的400G和1000000记录)。
此表包含图像(字段document
,thumbDocument
)。
运行简单查询时选择
SELECT *
FROM archivearseh
WHERE CONCAT(BlockCode,ArsehRow)='01011000106001'
或
SELECT *
FROM archivearseh
WHERE BlockCode='106001' and ArsehRow='01011000'
获得2分钟返回结果?!
如何减少运行查询的时间?
答案 0 :(得分:0)
使用BlockCode和ArsehRow列在表上创建索引。
答案 1 :(得分:0)
问题是您的 WHERE CONCAT(BlockCode,ArsehRow)='01011000106001'
不是 SARGEABLE
CONCAT
所以 CANT 使用索引,并且必须为每一行计算 SET NewColumn = CONCAT(BlockCode,ArsehRow)
CREATE INDEX for NewColumn;
and
WHERE NewColumn = '01011000106001'
因此,您可以在更新/插入时创建触发器来更新列并索引该字段,以便搜索速度更快(但更新/插入速度会更慢)。
WHERE BlockCode LIKE '010110%'
AND CONCAT(BlockCode,ArsehRow)='01011000106001'
或做一些事情来减少搜索域,如
public static int int_to_int(int input)
{
int[] value_array = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
21, 22, 23, 24, 25, 26};
int[]bin_array= {00000, 00001, 00010, 00011,
00100, 00101, 00110, 00111,
01000, 01001, 01010, 01011, 01100,
01101, 01110, 01111, 10000, 10001,
10010, 10011, 10100, 10101, 10110,
10111, 11000,11001, 11010, 11011};
for(int i=0; i <27; i++)
{
System.out.println("hello");
if(input==value_array[i])
{
System.out.println("returning: " + Integer.toOctalString(bin_array[i]) + "at: " + i);
return bin_array[i];
}
}
return -1;
}