如何加快MySQL中JSON数据的过滤和排序?
我有一个表“listing_data”,大约有150.000行。当数据来自JSON时,我在过滤和排序方面有问题。我在每个列上添加了筛选和排序所需的键 然而,由于用于存储JSON的一列“数据”使用“文本”,所以我无法在其中添加索引。我正在尝试运行此查询如何加快MySQL中JSON数据的过滤和排序?,mysql,query-optimization,mysql-json,Mysql,Query Optimization,Mysql Json,我有一个表“listing_data”,大约有150.000行。当数据来自JSON时,我在过滤和排序方面有问题。我在每个列上添加了筛选和排序所需的键 然而,由于用于存储JSON的一列“数据”使用“文本”,所以我无法在其中添加索引。我正在尝试运行此查询 SELECT id, title, slug, description, uniqueId, data, images, view, contact, lastSync, statu
SELECT
id,
title,
slug,
description,
uniqueId,
data,
images,
view,
contact,
lastSync,
status,
sold,
waktu,
FLOOR(
JSON_UNQUOTE(
JSON_EXTRACT(data, '$.price')
)/ 100000000
)* 100 AS rangePrice,
COUNT(id) AS total
FROM
listing_data
WHERE
JSON_UNQUOTE(
JSON_EXTRACT(data, '$.subCategory')
)= 'rumah'
and JSON_UNQUOTE(
JSON_EXTRACT(data, '$.type')
)= 'dijual'
and LOWER(
JSON_UNQUOTE(
JSON_EXTRACT(data, '$.province')
)
)= 'lampung'
and LOWER(
JSON_UNQUOTE(
JSON_EXTRACT(data, '$.regency')
)
)= 'bandar lampung'
and LOWER(
JSON_UNQUOTE(
JSON_EXTRACT(data, '$.district')
)
)= 'way halim'
GROUP BY
JSON_UNQUOTE(
JSON_EXTRACT(data, '$.price')
)
ORDER BY
rangePrice ASC
LIMIT
0, 20
运行时间为2.8148秒。有什么办法可以让它更快?我想知道是否有办法将索引添加到文本列。您可以从JSON列提取所有需要的数据,并将其放入新列中 这些新列可以是可以索引的类型
也许您甚至可以完全摆脱JSON列?您可以从JSON列提取所有需要的数据,并将其放入新的列中 这些新列可以是可以索引的类型 也许您甚至可以完全摆脱JSON列?
妨碍了优化。使用合适的排序规则LOWER
妨碍了优化;你为什么需要它JSON\u UNQUOTE
- 将常用列(尤其是
或price
和general geographic area,也可能是rangeprice
)拉到各自的列中类型
- 然后在其上构建选定的“复合”索引
无效,因为它不包括其他各种列。也许这需要一个单独的查询或第二次传递数据分组依据
- 使用
代替COUNT(*)
;后者需要进行不必要的测试COUNT(id)
id不为NULL
妨碍了优化。使用合适的排序规则LOWER
妨碍了优化;你为什么需要它JSON\u UNQUOTE
- 将常用列(尤其是
或price
和general geographic area,也可能是rangeprice
)拉到各自的列中类型
- 然后在其上构建选定的“复合”索引
无效,因为它不包括其他各种列。也许这需要一个单独的查询或第二次传递数据分组依据
- 使用
代替COUNT(*)
;后者需要进行不必要的测试COUNT(id)
id不为NULL