· 7 years ago · Nov 25, 2018, 05:24 AM
1-- SQL
2
3local db = sqlite3.open_memory()
4
5db:exec[[
6 create table if not exists vals (
7 val integer
8 );
9 create index vals_val_1 on vals (val asc);
10]]
11
12local sqlInsert
13do
14 local stmt = db:prepare[[
15 insert into vals (val) values (?);
16 ]]
17 sqlInsert = function(i)
18 stmt:bind(1, i)
19 stmt:step()
20 stmt:reset()
21 end
22end
23
24local sqlInsert
25do
26 local stmt = db:prepare[[
27 insert into vals (val) values (?);
28 ]]
29 sqlInsert = function(i)
30 stmt:bind_values(i)
31 stmt:step()
32 stmt:reset()
33 end
34end
35
36local sqlBetween
37do
38 local stmt = db:prepare[[
39 select count(all) from vals where val between ? and ?;
40 ]]
41 sqlBetween = function(a, b)
42 local res
43 stmt:bind_values(a, b)
44 stmt:step()
45 res = stmt:get_uvalues()
46 stmt:reset()
47 return res
48 end
49end
50
51
52-- Table
53
54local tbl = {}
55
56local function tblInsert(i)
57 tbl[#tbl + 1] = i
58end
59
60local function tblBetween(a, b)
61 local res = 0
62 for _, i in ipairs(tbl) do
63 if a <= i and i <= b then
64 res = res + 1
65 end
66 end
67 return res
68end
69
70
71function client.load()
72 for i = 1, 200000 do
73 local n = math.random(2 ^ 30)
74 tblInsert(n)
75 sqlInsert(n)
76 end
77
78 local tblStart = love.timer.getTime()
79 local tblRes = tblBetween(0, 100000000)
80 local tblTime = love.timer.getTime() - tblStart
81 print(tblTime)
82
83 local sqlStart = love.timer.getTime()
84 local sqlRes = sqlBetween(0, 100000000)
85 local sqlTime = love.timer.getTime() - sqlStart
86 print(sqlTime)
87
88 print(tblRes, sqlRes)
89end