簡體   English   中英

如何在mysql5.7中為json數組類型創建索引

[英]How to create index on json array type in mysql5.7

現在我使用 SQL 腳本,如SELECT * FROM user WHERE JSON_CONTAINS(users, '[1]'); 但它會掃描全表,效率低下。 所以我想在users列上創建索引。

例如,我有一個名為users的列,數據看起來像[1,2,3,4] 請告訴我如何在 JSON 數組類型(生成虛擬列)上設置索引。 我已經閱讀了 MySQL 網站上的文檔,他們都談到了使用JSON_EXTRACT()函數在 JSON 對象類型中建立索引。

現在可以使用 MySQL 8+

下面是一個例子:

CREATE TABLE customers (
    id BIGINT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    modified DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    custinfo JSON
    );

ALTER TABLE customers ADD INDEX comp(id, modified, 
    (CAST(custinfo->'$.zipcode' AS UNSIGNED ARRAY)) );

以這種方式使用它:

SELECT * FROM customers 
    ->     WHERE JSON_CONTAINS(custinfo->'$.zipcode', CAST('[94507,94582]' AS JSON));

更多信息: https : //dev.mysql.com/doc/refman/8.0/en/create-index.html

你不能,至少是你想要的方式。 JSON 數據類型中,我們可以閱讀:

JSON列與其他二進制類型的列一樣,不直接編入索引; 相反,您可以在從JSON列中提取標量值的生成列上創建索引。 有關詳細示例,請參閱索引生成的列以提供 JSON 列索引

因此,隨着限制而來的是解決方法;-)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM