数据库索引优化
创建索引字段(C_CompanyName--公司名称,字段长度在10-16之间)
100万条数据
完全索引:
数据 52,406.9 KB
索引 58,214.0 KB
总计 108.0 MB
10位索引:
数据 52,406.9 KB
索引 43,402.0 KB
总计 95,808.9 KB
08位索引:
数据 52,406.9 KB
索引 36,906.0 KB
总计 89,312.9 KB
10位索引对于8位索引的索引大小增长14.967%
(434020-369060)/434020=14.967%
完全索引对于10位索引的索引大小增长25.444%
(582140-434020)/582140=25.444%
完全索引对于8位索引的索引大小增长36.603%
(582140-369060)/582140=36.603%
以下是查询时间(毫秒):
查询命中的:
100条数据第一次、二、三、四、、、、、、
完全索引查询总时间:840710720710691720
10位索引查询总时间:901131141121190180
08位索引查询总时间:1021150110160140111
400条数据
完全索引查询总时间:14711019105911201203104811871180
10位索引查询总时间:3033547518469472625418471
08位索引查询总时间:2752573623567449575549540
500条数据
完全索引查询总时间:15321232128111901301--->
10位索引查询总时间:2885670661673710----->
08位索引查询总时间:3360690730806621------->
--->115112811220128012601270
----->700654641641711641
------->761650731691690701
600条数据
完全索引查询总时间:17131381135114401291--->
10位索引查询总时间:3682761852720841----->
08位索引查询总时间:3011751830823801------->
--->137113811422129014121401
----->740811861851790822
------->800871720832811720
800条数据
完全索引查询总时间:20231652165216411561--->
10位索引查询总时间:404210909011071801----->
08位索引查询总时间:345397111601090951------->
--->166216211772166216311620
----->951114110409609801050
------->11101001881110110921033
1000条数据
完全索引查询总时间:24131841196118831871--->
10位索引查询总时间:35641353132112101272----->
08位索引查询总时间:41021080121113011201------->
--->180019311983183118021893
----->119012711110125212011340
------->141412121261133113311241
命中查询使用的数据是连续的一片数据,并没有使用零碎分散的数据。这样只会影响第一次查询,使用零碎数据首次查询的时间会远大于使用连续数据首次查询的时间。不过接下来的查询就差不多。
零碎查询
100条数据
6324733729732744
7616149148174153
6369144134146147
500条数据
1950912791267124812421248
18462673671665651691
20771684679672678664
查询不命中的数据:
数据
完全索引查询总时间:4895753766750757778
10位索引查询总时间:3046147156140138146
08位索引查询总时间:4134149133135142133
对于查询命中速度:8位索引和10位索引查询速度相差不大。差不多一样,而相比于完全索引的查询速度,大概增长了40%左右。
对于查询不命中速度:初次查询都差不多,而接下来的查询,10位索引和8位索引的查询速度明显快于完全索引的查询速度。
从数据上看,对于数据库创建索引,只要该字段的前多少位能满足我们的查询需求,这样适当的控制建立索引字段的位数能提高查询速度,同时也能减少索引文件的大小。