假设我有一个名为custom_properties
媒体表的 MySQL JSON 数据类型:
存储在列中的 json 数据的示例custom_properties
可能是:
{
"company_id": 1,
"uploaded_by": "Name",
"document_type": "Policy",
"policy_signed_date": "04/04/2018"
}
Run Code Online (Sandbox Code Playgroud)
在我的 PHP Laravel 应用程序中,我会执行以下操作:
$media = Media::where('custom_properties->company_id', Auth::user()->company_id)->orderBy('created_at', 'DESC')->get();
Run Code Online (Sandbox Code Playgroud)
这将获取属于公司 1 的所有媒体项目。
我的问题是,假设我们有 100 万条媒体记录,从性能角度来看,这是否是一种糟糕的获取记录的方法?谁能解释一下 MySQL 如何索引 JSON 数据类型?
来自MySQL 官方文档:
存储在 JSON 列中的 JSON 文档将转换为允许快速读取文档元素的内部格式。当服务器稍后必须读取以此二进制格式存储的 JSON 值时,不需要从文本表示中解析该值。二进制格式的结构使服务器能够直接通过键或数组索引查找子对象或嵌套值,而无需读取文档中它们之前或之后的所有值。