最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL JSON查詢與索引詳解

 更新時間:2025年11月10日 16:17:47   作者:憤怒的蘋果ext  
本文給大家介紹了MySQL JSON查詢與索引的相關知識,本文結合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧

前言

  • 自MySQL 5.7.8開始引入原生JSON支持,可用于存儲動態(tài)的列。此時如果想要建立索引,要先建立JSON某一列的虛擬列,使用虛擬列查詢。從MySQL 8.0.17開始,InnoDB支持多值索引,相比老版本的查詢方式就更直接了。

準備

  • 創(chuàng)建一張配置表,建表語句如下。
CREATE TABLE `t_config` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT COMMENT '主鍵',
  `extras` json DEFAULT NULL COMMENT '擴展列json字段',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='配置表';
  • 測試數(shù)據(jù)
INSERT INTO `t_config` (`id`, `extras`) VALUES (1, '{\"color\": \"red\", \"phone\": [\"157\", \"153\"]}');
INSERT INTO `t_config` (`id`, `extras`) VALUES (2, '{\"color\": \"green\", \"phone\": [\"157\", \"154\"]}');
  • 下面就開始介紹虛擬列多值索引查詢與索引方式。

虛擬列

測試平臺5.7.26

查詢

SELECT * FROM `t_config` WHERE extras->'$.color' = 'red';
或
SELECT * FROM `t_config` WHERE json_contains(extras->'$.color','"red"');

現(xiàn)在是走全表掃描

下面創(chuàng)建虛擬列和索引

ALTER TABLE `t_config`
ADD COLUMN `v_color` VARCHAR(32) GENERATED ALWAYS AS
(JSON_UNQUOTE(JSON_EXTRACT(`extras`, _utf8mb4'$.color'))) VIRTUAL NULL;
CREATE INDEX idx_v_color on t_config(v_color);

查詢就能走索引了

EXPLAIN SELECT * FROM `t_config` WHERE v_color = 'red';

但是數(shù)組phone未找到合適的方式查詢。

多值索引

測試平臺8.0.43

查詢(第二條語句不能利用索引)

SELECT * FROM `t_config` WHERE json_contains(extras->'$.color','"red"');
 或者
SELECT * FROM `t_config` WHERE extras->'$.color' = 'red';  

當前是全表掃描

EXPLAIN SELECT * FROM `t_config` WHERE json_contains(extras->'$.color','"red"');

增加json里 color字段索引

alter table t_config add index json_color( (cast(extras->'$.color' as char(32) array)));

現(xiàn)在就能走索引了

  • 對于數(shù)字數(shù)組字段,查詢方式
  • 要先創(chuàng)建索引,才能查到數(shù)據(jù)
alter table t_config add index phone( (cast(extras->'$.phone' as unsigned array)) );
 -- 查詢phone字段
 SELECT * FROM `t_config` WHERE json_contains(extras->'$.phone' , '157');
-- 查詢phone字段, 參數(shù)數(shù)組
 SELECT * FROM `t_config` WHERE json_contains(extras->'$.phone' , CAST('[157,153]' AS JSON));

能走索引

總結

  • 從執(zhí)行計劃看,虛擬列的索引執(zhí)行計劃更優(yōu),但利用多值索引的json_contains查詢方式就不需要轉換SQL。
  • 數(shù)組列:虛擬列暫未找到查詢數(shù)組的方式。多值索引要先創(chuàng)建才能查到數(shù)據(jù)。

參考

到此這篇關于MySQL JSON查詢與索引的文章就介紹到這了,更多相關mysql json索引內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • mysql8.0使用PXC實現(xiàn)高可用的示例(Rocky8.0環(huán)境)

    mysql8.0使用PXC實現(xiàn)高可用的示例(Rocky8.0環(huán)境)

    本文主要介紹了在Rocky8.0環(huán)境下搭建MySQL8.0的Percona XtraDB Cluster(PXC)集群,,可以實現(xiàn)數(shù)據(jù)實時同步、讀寫分離和高可用性,具有一定的參考價值,感興趣的可以了解一下
    2025-02-02
  • 基于mysql時間處理函數(shù)的應用詳解

    基于mysql時間處理函數(shù)的應用詳解

    本篇文章是對mysql時間處理函數(shù)進行了詳細的分析介紹,需要的朋友參考下
    2013-06-06
  • 通過實例分析MySQL中的四種事務隔離級別

    通過實例分析MySQL中的四種事務隔離級別

    SQL標準定義了4種隔離級別,包括了一些具體規(guī)則,用來限定事務內外的哪些改變是可見的,哪些是不可見的。下面這篇文章通過實例詳細的給大家分析了關于MySQL中的四種事務隔離級別的相關資料,需要的朋友可以參考下。
    2017-08-08
  • mysql記錄根據(jù)日期字段倒序輸出

    mysql記錄根據(jù)日期字段倒序輸出

    這篇文章主要介紹了mysql記錄根據(jù)日期字段倒序輸出 的相關資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • MySql數(shù)據(jù)引擎簡介與選擇方法

    MySql數(shù)據(jù)引擎簡介與選擇方法

    在MySQL 5.1中,MySQL AB引入了新的插件式存儲引擎體系結構,允許將存儲引擎加載到正在運新的MySQL服務器中
    2012-11-11
  • 值得收藏的mysql常用命令集錦

    值得收藏的mysql常用命令集錦

    這篇文章主要為大家整理了mysql常用命令匯總,連接Mysql、修改mysql密碼、數(shù)據(jù)庫的創(chuàng)建刪除等,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-11-11
  • mysql中InnoDB幻讀解決方案與機制

    mysql中InnoDB幻讀解決方案與機制

    本文主要介紹了mysql中InnoDB幻讀解決方案與機制,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2026-03-03
  • MySQL中UPDATE語句使用的實例教程

    MySQL中UPDATE語句使用的實例教程

    這篇文章主要介紹了MySQL中UPDATE語句使用的實例教程,包括UPDATE的使用中所容易引起的性能問題的分析,需要的朋友可以參考下
    2015-11-11
  • MySQL中的驅動表與被驅動表及含義

    MySQL中的驅動表與被驅動表及含義

    使用join連接查詢時如果有where條件,則MySQL執(zhí)行器會根據(jù)查詢條件過濾后的結果自動選擇驅動表或被驅動表,這篇文章主要介紹了MySQL的驅動表與被驅動表,需要的朋友可以參考下
    2023-10-10
  • 淺談MySQL數(shù)據(jù)庫表鎖了怎么解鎖

    淺談MySQL數(shù)據(jù)庫表鎖了怎么解鎖

    在使用 MySQL 數(shù)據(jù)庫時,有時候會發(fā)生某個表被鎖住的情況,這可能會導致其他用戶無法對該表進行讀寫操作,影響系統(tǒng)的正常運行,本文主要介紹了淺談MySQL數(shù)據(jù)庫表鎖了怎么解鎖,感興趣的可以了解一下
    2023-10-10

最新評論

娱乐| 翁源县| 江安县| 山阴县| 应城市| 独山县| 林周县| 平罗县| 岢岚县| 棋牌| 高清| 大渡口区| 墨玉县| 斗六市| 永宁县| 西昌市| 陆丰市| 霞浦县| 新晃| 谢通门县| 忻城县| 清远市| 邯郸县| 定安县| 顺平县| 九江市| 宁陕县| 枣阳市| 承德县| 南阳市| 手游| 安宁市| 平凉市| 锡林郭勒盟| 民乐县| 汾西县| 铅山县| 青川县| 乌什县| 延边| 固原市|