1.
你存文本和存数据库,不一定数据库会节省空间,但是可预见的,大部分情况下数据库会更节省空间,尤其是在大数据量的情况下
2.
读写文本文件和数据库速度差别肯定非常大,首先数据库有索引之类的,可以加速数据读取写入效率,当然你文本文件也可以实现这些,但是跟自己从头写个数据库没差别了,文本文件读写你总得要考虑命中率,文本的遍历命中是很低的
3.
sqlite其实不推荐在服务端使用,因为在并发读写的情况下表现很差,至少连2个9的可靠性都达不到,物联网设备要的是高读高写还有大数据量,其实我是推荐MongoDB的,不过你这里选用MySQL也是可以的
4.
关于背后的原理,你可以了解下数据结构相关的知识
数据库,是经过优化的存储格式,一定比文本文件效率好,因为结构化处理的关系,可以很好地应对如搜索、匹配等 *** 作;而文本,表面看起来简单,但是,随着量的增加,一旦达到某个量级,几乎就不可用了。
至于CPU,数据库比文本文件的方案更加可控,更安全。
在数据库中当然是可以对001和005使用聚合函数max()进行大小比较的,但是我们必须要留意文本型数值和数字型数值在比较数值大小时,数据库引擎对不同的字段数据类型其比较的结果可能会有所不同!下面举例说明一下:
比如 10和9,按数字比较大小则 10>9,但是如果按文本比较大小则 '10'<'9',因为两个字串比较大小时是从左边第一个字符开始逐个字符进行比较的,一旦分出高低,比较将立即结束不再进行余下比较。'10'开头为1,'9'开头为9首尾字符即可分出大小,这样文本数字'10'就会小于文本数字'9'。我们再来看看001和005,则不论是按数字类型还是按文本类型比较均为前者小于后者,按数字比较的话自然1小于5,若按字串比较,前两位打成平手到第三个字符时就分出了大小。
数据库中字符和字串比较大小的排序规则基本上与我们日常使用的字词典里的排序规则相互吻合,两个字符或字串根据它们在字典中的排序位置我们通常不必依赖电脑运算就可以判断出谁大谁小。
现在我们实测一下使用聚合函数Max()对比文本数据类型字段和数字类型字段的比较结果,以下是SQL实验代码:
drop table if exists t2
-- 创建测试表t2含文本数据型“数字”字段和数字类型字段
create table t2(id int auto_increment primary key,
charNum varchar(10),digitNum int)
-- 插入测试数据
insert into t2(charNum,digitNum) values
('001',1),('005',5),('0010',10)
-- 查看待测数据
select * from t2
-- 直接选出文本“数字”字段中的最大值和数字字段中的最大值
select max(charNum) as maxCharNum,
max(digitNum) as maxDigitNum from t2
-- 将文本“数字”字段转换为数字类型后再选出其最大值,以及直接选出数字字段最大值
select max(convert(charNum,signed)) as maxConvertCharNum,
max(digitNum) as maxDigitNum from t2
测试截图:
待测数据:
直接对文本和数字两种数据类型字段使用Max()函数的返回结果对比:
我们可以看到直接对文本数据类型字段使用Max函数选出的最大值是“005”而非“0010”
下面是将文本数据类型数字转换为数字数据类型后才使用Max函数的对比结果:
我们可以看到对文本类型字段使用Max函数的最大值已经跟数字数据类型字段的最大值一样了,都是10。
总结:
直接对字符型数据类型字段使用聚合函数Max()、Min()所返回的极值将遵循一般字(词)典对字(词)里设定的排序规则,所选出的最大(小)值不一定是数字意义上的极值,如果需要得出严格数字意义上的极值就必须先进行类型转换,否则得出的结果可能会与期望值有出入。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)