关于建设网站的经费请示,西安百度seo排名,全球软件公司排名,sticklr wp wordpress【图书推荐】《MySQL 9从入门到性能优化#xff08;视频教学版#xff09;》-CSDN博客
《MySQL 9从入门到性能优化#xff08;视频教学版#xff09;#xff08;数据库技术丛书#xff09;》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)
本文讲解MySQL9的3个新特性视频教学版》-CSDN博客
《MySQL 9从入门到性能优化视频教学版数据库技术丛书》(王英英)【摘要 书评 试读】- 京东图书 (jd.com)
本文讲解MySQL9的3个新特性支持将JSON输出保存到用户变量、支持准备语句以及支持面向AI的向量存储。
17.12 MySQL9新特性1——支持将JSON输出保存到用户变量
从MySQL 9版本开始支持将EXPLAIN FORMAT的JSON输出保存到用户变量下面通过一个案例来理解该新特性。 创建演示数据表tbSQL语句如下
CREATE TABLE tb
(
id INT,
name VARCHAR(25)
); 插入演示数据SQL语句如下
INSERT INTO tb (id ,name) VALUES (1,电视机) ,(2,空调); 将EXPLAIN FORMAT的JSON输出保存到用户变量myvariable中SQL语句如下
EXPLAIN FORMAT JSON INTO myvariable
UPDATE tb SET name 洗衣机 WHERE id 2; 查看用户变量myvariable执行结果如下
mysql SELECT myvariable\G
*************************** 1. row ***************************
myvariable: {query_block: {select_id: 1,table: {update: true,table_name: tb,access_type: ALL,rows_examined_per_scan: 2,filtered: 100.00,attached_condition: (test_db.tb.id 2)}}
}
17.13 MySQL9新特性2——支持准备语句
MySQL 9.0支持准备语句Prepared Statements这是一种预编译的SQL语句可以包含占位符这些占位符在执行时会被实际的值替换。准备语句的优势如下
(1) 准备语句可以提高性能因为SQL解析和编译只发生一次然后可以被多次执行每次都可以使用不同的参数。
(2) 准备语句能增强应用程序的安全性因为它们有助于防止SQL注入攻击。
下面通过案例来理解准备语句的使用方法。 使用PREPARE语句准备一个SQL语句模板该模板可以包含一个或多个占位符?。
mysql SET s SELECT SQRT(POW(?,2) POW(?,2)) AS hypotenuse;
mysql PREPARE stmt1 FROM s; 使用SET语句为占位符设置具体的值。
mysql SET a 6;
mysql SET b 8; 使用EXECUTE语句执行准备好的SQL语句并用之前设置的参数替换占位符。
mysql EXECUTE stmt1 USING a, b;
------------
| hypotenuse |
------------
| 10 |
------------
执行完成后使用DEALLOCATE PREPARE语句释放准备好的语句。
mysql DEALLOCATE PREPARE stmt1;
准备语句还可以用于动态选择需要查询的表通过将表名作为用户变量并在执行时替换到SQL语句中。例如通过设置用户变量table的值为表名然后构造一个包含该表名的SQL查询字符串最后使用PREPARE和EXECUTE语句执行该查询。这种灵活性使得准备语句在处理动态SQL场景时非常有用。
7.14 MySQL9新特性3——支持面向AI的向量存储
MySQL 9.0 增加了一个新的向量数据类型VECTOR。它是一种可以存储N个数据项的数据结构数组语法格式如下
VECTOR(N)
其中每个数据项都是一个4字节的单精度浮点数。默认的数据项为2048个最大值为16383。
向量类型的数据可以使用二进制字符串或者列表分隔的字符串表示例如
CREATE TABLE mytb1(id int, rgb vector(3));
INSERT INTO mytb1 VALUES (1, to_vector([255,255,255]));
INSERT INTO mytb1 VALUES (2, to_vector([128,255,0]));
INSERT INTO mytb1 VALUES (3, to_vector([0,65,225]));
MySQL 9.0 同时还增加了一些用于操作VECTOR数据的向量函数。
1. STRING_TO_VECTOR 函数
STRING_TO_VECTOR 函数用于将字符串形式的向量数据转换为二进制STRING_TO_VECTOR 函数的参数是一个字符串包含一组由逗号分隔的浮点数并且使用方括号[]进行引用。例如
mysql SELECT HEX(STRING_TO_VECTOR([1.08, -18.8, 88]));
--------------------------------------------
| HEX(STRING_TO_VECTOR([1.08, -18.8, 88])) |
--------------------------------------------
| 713D8A3F666696C10000B042 |
--------------------------------------------
2. VECTOR_TO_STRING 函数
VECTOR_TO_STRING 函数用于将向量数据转换为字符串。例如
mysql SELECT VECTOR_TO_STRING(STRING_TO_VECTOR([1.08, -18.8, 88]));
---------------------------------------------------------
| VECTOR_TO_STRING(STRING_TO_VECTOR([1.08, -18.8, 88])) |
---------------------------------------------------------
| [1.08000e00,-1.88000e01,8.80000e01] |
---------------------------------------------------------mysql SELECT VECTOR_TO_STRING(0x00000040000040444000A0400000E400);
------------------------------------------------------
| VECTOR_TO_STRING(0x00000040000040444000A0400000E400) |
------------------------------------------------------
| [2.00000e00,7.68000e02,5.00003e00,2.09385e-38] |
------------------------------------------------------
输出结果中的浮点数使用科学计数法表示。
3. VECTOR_DIM 函数
VECTOR_DIM 函数用于返回向量数据的维度也就是数据项的个数。例如
mysql SELECT VECTOR_DIM(rgb) FROM mytb1;
-----------------
| VECTOR_DIM(rgb) |
-----------------
| 3 |
| 3 |
| 3 |
-----------------