SQLITE3数据库 一个表支持多少个字段?

haosuai 2009-11-19 09:30:37
RT
...全文
1492 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ACMAIN_CHM 2009-11-19
  • 打赏
  • 举报
回复
如果 只是 X*100/255 这种简单计算,则不建议保留这些计算字段。用查询就行了。

select x, X*100/255 from tttt
WWWWA 2009-11-19
  • 打赏
  • 举报
回复
一般而言,可以通过计算得到,就没有必要生成物理字段,运行时生成就可以了,
当然你可以根据你的具体情况来决定,比如测试一下在SELECT 中生成计算字段
haosuai 2009-11-19
  • 打赏
  • 举报
回复
其实我说的计算不是字段的加法,与或,而是这个字段的某些BIT位通过一些公式计算出一个值,这个值就是我说的一项数据。
比如:这个字段存放0X830Xf10X100X410X040X200Xe9
我取其中的第五位,通过公式X*100/255 得到的值就是我说的一项
ACMAIN_CHM 2009-11-19
  • 打赏
  • 举报
回复
从数据库本身来说SQLITE没有限制。

96个字段不算多,但从你的解释看来,这些字段是通过同一记录的其它字段来计算生成的,如果只是简单的计算,则不建议在表中存放这些字段

比如
A, B C
1 2 3
1 4 5

C 字段永远等于 A+B则数据库设计的原则中,是消除冗余,C字段不应该设计在表中。可以通过查询来直接实现 select a,b, (a+b) as c from table1;
WWWWA 2009-11-19
  • 打赏
  • 举报
回复
字段多了,对速度是有很大的影响,根据你上述情况,方案2可行
haosuai 2009-11-19
  • 打赏
  • 举报
回复
我现在的问题是现在的表里面有一个字段需要经过一定的计算(协议解析),会得到96项数据。现在又2个方案1,通过一次计算,把这96项数据一次存入数据库,要用这些数据的时候,直接取数据库数据;2,数据库存这样一个字段,每次要用的时候都计算(协议解析,计算量不大,一般是2-3次加法,与或)。

刚刚也查了下SQLITE的官方网站,确实没有看见有限制字段的个数。
但是96个字段的表建出来不知道有没有意义(查询很慢),或者要存入96个字段的话,把这96字段分成多表。
但是表的数据量也不大,分4-5个表,我觉得还不如用方法2每次计算下。

不知道各位大侠的看法?
有没有真的使用过100个字段表的兄弟,现身下使用的情况?到底是不是很慢?
WWWWA 2009-11-19
  • 打赏
  • 举报
回复
理论上没有限制
SQLite数据库是否有已知的大小限制?

数据库大小被限制在 2TB(241 bytes). 这是理论限制。事实上,你应该把 SQLite数据库的大小限制在100GB以下,以免出现运行性能上的问题。如果你需要储存100GB或更多数据在一个数据库中, 考虑使用为此而设计的企业版数据库吧。

一个数据库的理论行数限制是 264-1,显然你会在达到行数限制之前先超过文件大小的限制。目前一行可以存放 230 bytes 数据。而基本的文件格式可以支持行大小到约 262 bytes.

可能还会有对于表、索引的数目或表和索引中的字段数的限制,但没人知道是多少。事实上,每当新数据库打开时,SQLite需要读取和 分析所有表和索引声明的初始SQL,所以,为了调用 sqlite3_open() 时获得最佳性能,最好减少声明的表的数目。同样的,即使 对于表中字段数没有限制,多于 100个也显得太多了。 只有表开头的31个字段会得到优化。你可以在一个索引中放入任意多的字段但超过30字段的索引将不用于优化查询。
ACMAIN_CHM 2009-11-19
  • 打赏
  • 举报
回复
[Quote]比如0x830xf10x100x410x040x200xe9.....(后面还有数据)
得到第一项Y:X-> 5 TH, Y = X*100/255
得到第二项Y: X-> 2 TH If X=0xff, y = -% else Y = X*199.2 /255 –100
........
得到第96项Y[/Quote]

看不懂你的算法。 很简单,你能否直接在select ... 中利用表达式完成?如果能,则不要这些字段,直接用SELECT实现,这样即使你的 6进制的字符 有改动,你也不需要去更新后面的 96个字段。 如果不能,则你可以加上这96个字段。
haosuai 2009-11-19
  • 打赏
  • 举报
回复
可能我说的这个例子有点歧义,我这个字段放的是一串16进制的字符,每一字节或者这一字节的某些BIT位经过一定的计算,得到一项,总共可以得到96项。
比如0x830xf10x100x410x040x200xe9.....(后面还有数据)
得到第一项Y:X-> 5 TH, Y = X*100/255
得到第二项Y: X-> 2 TH If X=0xff, y = -% else Y = X*199.2 /255 –100
........
得到第96项Y


haosuai 2009-11-19
  • 打赏
  • 举报
回复
发大幅度

2,209

社区成员

发帖
与我相关
我的任务
社区描述
其他数据库开发 其他数据库
社区管理员
  • 其他数据库社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧