Lua table直接索引VS缓存索引性能测试小示例

local p = {}
p.t = {}
p.t.p = {}
p.t.p.t = {}
p.t.p.t.p = {}
p.t.p.t.p.t = {}
p.t.p.t.p.t.p = {}
p.t.p.t.p.t.p.t = {}
p.t.p.t.p.t.p.t.p = {}
p.t.p.t.p.t.p.t.p.t = {}
p.t.p.t.p.t.p.t.p.t.p = {}
p.t.p.t.p.t.p.t.p.t.p.t = {}
p.t.p.t.p.t.p.t.p.t.p.t.p = {}
p.t.p.t.p.t.p.t.p.t.p.t.p.x = 1

local s1 = os.clock()

for i = 1, 100000 do
    p.t.p.t.p.t.p.t.p.t.p.t.p.x = p.t.p.t.p.t.p.t.p.t.p.t.p.x + 1
end

local e1 = os.clock()

print("runtime1 = " .. (e1 - s1))

local s2 = os.clock()

local t1 = p.t.p.t.p.t.p.t.p.t.p.t.p
for i = 1, 100000 do
    t1.x = t1.x + 1
end

local e2 = os.clock()

print("runtime2 = " .. (e2 - s2))

local s3 = os.clock()

for i = 1, 100000 do
    local t3 = p.t.p.t.p.t.p.t.p.t.p.t.p
    t3.x = t3.x + 1
end

local e3 = os.clock()

print("runtime3 = " .. (e3 - s3))

runtime1 = 0.024
runtime2 = 0.003
runtime3 = 0.013
[Finished in 0.1s]

结论:

在循环中频繁索引一个table元素,可以先local一下.

局部变量比全局变量快,全局变量编译后指令多 1V4(具体百度下)

原文地址:https://www.cnblogs.com/xixidaguai/p/8321191.html

时间: 2024-11-05 23:20:06

Lua table直接索引VS缓存索引性能测试小示例的相关文章

C# 循环中 直接索引 VS 缓存索引 性能测试

using System; namespace TestCSharp { class MainClass { public class t1 { public b1 b = new b1(); } public class b1 { public t2 t = new t2(); } public class t2 { public b2 b = new b2(); } public class b2 { public t3 t = new t3(); } public class t3 { p

Lua Table pairs输出顺序问题 (版本差异 解决数字索引间断并兼容字符串索引)

问题标签: Lua Table 迭代器;Lua Table 输出顺序; Lua Table 顺序输出;Lua Table 数字索引 字符串索引;Lua Table pairs; 问题背景: 使用pairs输出table时,其输出顺序与通常认知不相符. 例如使用pairs输出如下table T = { [1] = "1", [2] = "1", [3] = "1", [4] = "1", [5] = "1",

oracle单列索引和组合索引性能测试

共有两张表t1,t2 t1的表结构 t2的表结构 t1和t2通过 insert into t1 values ('www','aaa','bbb'); insert into t1 values ('www1','aaa1','bbb1'); insert into t1 values ('www2','aaa2','bbb2'); insert into t1 values ('www3','aaa3','bbb3'); t2同理构建 insert into t1 select * from

MySql存储引擎+表解压缩机制+索引+查询缓存机制+慢查询日志

一.大型网站优化之MySql优化 1.优化和不优化的对比的 在业界当中我们有一个叫大数据(big data)的概念,所谓的大数据指代千万级别以上的数据作为起步的数据.所以我们现在需要对两张都具有50331650条记录的表进行查询对比,其中表名为tbl_no的表是没有做过任何优化手段的表,表名为tbl_yes的表是做过优化手段的表.这个实验的目的是观察具有优化手段和不具有优化手段的查询中速度的差别. 实验条件: 1)两张表的数据记录总数是相同的 2)两张表的数据字段结构也是一样的 3)查询的记录的

LDAP索引及缓存优化

一.设置索引 索引将查找信息和 Directory Server 条目关联起来. Directory Server支持以下几种索引: 1出现索引 (pres) - 列出了具有特定属性的条目,与属性的值无关. 2等式索引 (eq) - 使您能够高效地搜索包含特定属性值的条目. 3近似索引 (approx) - 通过使用 ~= 过滤运算符提供了高效的"音似"搜索功能. 例如,近似索引对于搜索部分名称或拼错的名称很有用.Directory Server 使用 变音位语音算法的一个变体来执行近

[Lua]基于cc.load('mvc') .ViewBase索引资源方案

local MainScene = class("MainScene", cc.load("mvc").ViewBase) MainScene.RESOURCE_FILENAME = "MainScene.csb" function MainScene:nodeFromPath(path, root) root = root or self:getResourceNode() assert(root, 'need root node') loca

lua table remove元素的问题

当我在工作中使用lua进行开发时,发现在lua中有4种方式遍历一个table,当然,从本质上来说其实都一样,只是形式不同,这四种方式分别是: for key, value in pairs(tbtest) do XXX end for key, value in ipairs(tbtest) do XXX end for i=1, #(tbtest) do XXX end for i=1, table.maxn(tbtest) do XXX end 前两种是泛型遍历,后两种是数值型遍历.当然你还

mysql高效索引之覆盖索引

概念 如果索引包含所有满足查询需要的数据的索引成为覆盖索引(Covering Index),也就是平时所说的不需要回表操作 判断标准 使用explain,可以通过输出的extra列来判断,对于一个索引覆盖查询,显示为using index,MySQL查询优化器在执行查询前会决定是否有索引覆盖查询 注意 1.覆盖索引也并不适用于任意的索引类型,索引必须存储列的值 2.Hash 和full-text索引不存储值,因此MySQL只能使用B-TREE 3.并且不同的存储引擎实现覆盖索引都是不同的 4.并

MySQL普通索引、唯一索引、主索引、外键索引、复合索引、全文索引的使用

1.普通索引 普通索引(由关键字KEY或INDEX定义的索引)的唯一任务是加快对数据的访问速度.因此,应该只为那些最经常出现在查询条件(WHERE column = ...)或排序条件(ORDER BY column)中的数据列创建索引.只要有可能,就应该选择一个数据最整齐.最紧凑的数据列(如一个整数类型的数据列)来创建索引. 2.唯一索引 普通索引允许被索引的数据列包含重复的值.比如说,因为人有可能同名,所以同一个姓名在同一个"员工个人资料"数据表里可能出现两次或更多次. 如果能确定