Mongodb 按 DateTime 查询记录是否比按 String 更快?
Does Mongodb queries a record by DateTime quicker than by String?
例如,这是一条记录:
{
"_id" : ObjectId("576bc7a48114a14b47920d60"),
"id" : "TEST0001",
"testTime" : ISODate("2016-06-23T11:28:06.529+0000")
}
testTime
是ISODate,Mongodb用testTime
查询记录比这个快吗? :
{
"_id" : ObjectId("576bc7a48114a14b47920d60"),
"id" : "TEST0001",
"testTime" : "2016-06-23 11:28:06"
}
是的。
不同之处在于日期对象在日期时间对象中存储为数字。
要理解这一点,我们可以使用这个插图:
当查询dateTime
时,dateTime
存储在数字对象中,这意味着我们对数字进行了比较。 Mongo 会将大小为 64 位(8 字节)的对象 see here 与同一对象进行比较。
当比较字符串时,mongo 像这样加载字符串:2016-06-27T08:39:44.000
即 23 个字符*2 字节 (utf) => 46 个字节以在内存中进行比较,需要检查从最高到最低的..
现在,您知道为什么使用 dateObject 而不是 string 更快的答案了。
欢迎大家提出意见!
Comparison/Sort Order
- MinKey(内部类型)
- 空
- 数字(整数、长整数、双精度数)
- 符号、字符串
- 对象
- 数组
- 二进制数据
- ObjectId
- 布尔值
- 日期
- 时间戳
- 常规
- 表达式
- MaxKey(内部类型)
例如,这是一条记录:
{
"_id" : ObjectId("576bc7a48114a14b47920d60"),
"id" : "TEST0001",
"testTime" : ISODate("2016-06-23T11:28:06.529+0000")
}
testTime
是ISODate,Mongodb用testTime
查询记录比这个快吗? :
{
"_id" : ObjectId("576bc7a48114a14b47920d60"),
"id" : "TEST0001",
"testTime" : "2016-06-23 11:28:06"
}
是的。
不同之处在于日期对象在日期时间对象中存储为数字。
要理解这一点,我们可以使用这个插图:
当查询dateTime
时,dateTime
存储在数字对象中,这意味着我们对数字进行了比较。 Mongo 会将大小为 64 位(8 字节)的对象 see here 与同一对象进行比较。
当比较字符串时,mongo 像这样加载字符串:2016-06-27T08:39:44.000
即 23 个字符*2 字节 (utf) => 46 个字节以在内存中进行比较,需要检查从最高到最低的..
现在,您知道为什么使用 dateObject 而不是 string 更快的答案了。
欢迎大家提出意见!
Comparison/Sort Order
- MinKey(内部类型)
- 空
- 数字(整数、长整数、双精度数)
- 符号、字符串
- 对象
- 数组
- 二进制数据
- ObjectId
- 布尔值
- 日期
- 时间戳
- 常规
- 表达式
- MaxKey(内部类型)