亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

MySQL使用索引合并(Index?Merge)提高查詢效率

 更新時間:2024年07月13日 10:43:29   作者:華為云開發(fā)者聯(lián)盟  
本文介紹了索引合并(Index?Merge)的實(shí)現(xiàn)原理、場景約束與通過案例驗(yàn)證的優(yōu)缺點(diǎn),在實(shí)際使用中,當(dāng)查詢條件列較多且無法使用聯(lián)合索引時,就可以考慮使用索引合并,利用多個索引加速查詢,但要注意,索引合并并非在任何場景下均具有較好的效果,需要結(jié)合具體情況選擇

在生產(chǎn)環(huán)境中,MySQL語句的where查詢通常會包含多個條件判斷,以AND或OR操作進(jìn)行連接。然而,對一個表進(jìn)行查詢最多只能利用該表上的一個索引,其他條件需要在回表查詢時進(jìn)行判斷(不考慮覆蓋索引的情況)。當(dāng)回表的記錄數(shù)很多時,需要進(jìn)行大量的隨機(jī)IO,這可能導(dǎo)致查詢性能下降。因此,MySQL 5.x 版本推出索引合并(Index Merge)來解決該問題。

本文將基于MySQL 8.0.22版本對MySQL的索引合并功能、實(shí)現(xiàn)原理及場景約束進(jìn)行詳細(xì)介紹,同時也會結(jié)合原理對其優(yōu)缺點(diǎn)進(jìn)行淺析,并通過例子進(jìn)行驗(yàn)證。

什么是索引合并(Index Merge)?

索引合并是通過對一個表同時使用多個索引進(jìn)行條件掃描,并將滿足條件的多個主鍵集合取交集或并集后再進(jìn)行回表,可以提升查詢效率。

索引合并主要包含交集(intersection),并集(union)和排序并集(sort-union)三種類型:

  • intersection:將基于多個索引掃描的結(jié)果集取交集后返回給用戶;
  • union:將基于多個索引掃描的結(jié)果集取并集后返回給用戶;
  • sort-union:與union類似,不同的是sort-union會對結(jié)果集進(jìn)行排序,隨后再返回給用戶;

MySQL中有四個開關(guān)(index_merge、index_merge_intersection、index_merge_union以及index_merge_sort_union)對上述三種索引合并類型提供支持,可以通過修改optimizer_switch系統(tǒng)參數(shù)中的四個開關(guān)標(biāo)識來控制索引合并特性的使用。

假設(shè)創(chuàng)建表T,并插入如下數(shù)據(jù):

CREATE TABLE T(  `id` int NOT NULL AUTO_INCREMENT,
`a` int NOT NULL,
`b` char(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_a` (`a`) USING BTREE,
KEY `idx_b` (`b`) USING BTREE
)ENGINE=InnoDB AUTO_INCREMENT=1;

INSERT INTO T (a, b) VALUES (1, 'A'), (2, 'B'),(3, 'C'),(4, 'B'),(1, 'C');

默認(rèn)情況下,四個開關(guān)均為開啟狀態(tài)。如果需要單獨(dú)使用某個合并類型,需設(shè)置index_merge=off,并將相應(yīng)待啟用的合并類型標(biāo)識(例如,index_merge_sort_union)設(shè)置為on。

開關(guān)開啟后,可通過EXPLAIN執(zhí)行計(jì)劃查看當(dāng)前查詢語句是否使用了索引合并。

mysql> explain SELECT * FROM T WHERE a=1 OR b='B';
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key         | key_len | ref  | rows | filtered | Extra                                 
|+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | idx_a,idx_b   | idx_a,idx_b | 4,5     | NULL |    4 |   100.00 | Using union(idx_a,idx_b); Using where |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
1 row in set, 1 warning (0.01 sec)

上面代碼顯示type類型為index_merge,表示使用了索引合并。key列顯示使用到的所有索引名稱,該語句中同時使用了idx_a和idx_b兩個索引完成查詢。Extra列顯示具體使用了哪種類型的索引合并,該語句顯示Using union(...),表示索引合并類型為union。

此外,可以使用index_merge/no_index_merge給查詢語句添加hint,強(qiáng)制SQL語句使用/不使用索引合并。

• 如果查詢默認(rèn)未使用索引合并,可以通過添加index_merge強(qiáng)制指定:

mysql> EXPLAIN SELECT * FROM T WHERE a=2 AND b='A';
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key   | key_len | ref   | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | T     | NULL       | ref  | idx_a,idx_b   | idx_a | 4       | const |    1 |    20.00 | Using where |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)
mysql> EXPLAIN SELECT /*+ INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=2 AND b='A';
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key         | key_len | ref  | rows | filtered | Extra                                                  |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | idx_a,idx_b   | idx_a,idx_b | 4,5     | NULL |    1 |   100.00 | Using intersect(idx_a,idx_b); Using where; Using index |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

• 使用no_index_merge給查詢語句添加hint,可以忽略索引合并優(yōu)化:

mysql> EXPLAIN SELECT * FROM T WHERE a=1 OR b='A';
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key         | key_len | ref  | rows | filtered | Extra                                 |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | idx_a,idx_b   | idx_a,idx_b | 4,5     | NULL |    3 |   100.00 | Using union(idx_a,idx_b); Using where |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
1 row in set, 1 warning (0.00 sec)
mysql> EXPLAIN SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=1 OR b='A';
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | T     | NULL       | ALL  | idx_a,idx_b   | NULL | NULL    | NULL |    5 |    36.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

索引合并(Index Merge)原理

1.  Index Merge Intersection

Index Merge Intersection會在使用到的多個索引上同時進(jìn)行掃描,并取這些掃描結(jié)果的交集作為最終結(jié)果集。

以“SELECT * FROM T WHERE a=1 AND b='C'; ”語句為例:

• 未使用索引合并時,MySQL利用索引idx_a獲取到滿足條件a=1的所有主鍵id,根據(jù)主鍵id進(jìn)行回表查詢到相關(guān)記錄,隨后再使用條件b='C'對這些記錄進(jìn)行判斷,獲取最終查詢結(jié)果。

mysql> explain SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=1 AND b='C';
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
| id | select_type | table | partitions | type | possible_keys | key   | key_len | ref   | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
|  1 | SIMPLE      | T     | NULL       | ref  | idx_a,idx_b   | idx_a | 4       | const |    2 |    40.00 | Using where |
+----+-------------+-------+------------+------+---------------+-------+---------+-------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

• 使用索引合并時,MySQL分別利用索引idx_a和idx_b獲取滿足條件a=1和b='C'的主鍵id集合setA和setB。隨后取setA和setB中主鍵id的交集setC,并使用setC中主鍵id進(jìn)行回表,獲取最終查詢結(jié)果。

mysql> explain SELECT * FROM T WHERE a=1 AND b='C';
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key         | key_len | ref  | rows | filtered | Extra                                                  |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | idx_a,idx_b   | idx_a,idx_b | 4,5     | NULL |    1 |   100.00 | Using intersect(idx_a,idx_b); Using where; Using index |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------------------+
1 row in set, 1 warning (0.00 sec)

執(zhí)行流程如下:

MySQL中為什么要使用索引合并(Index Merge)?_索引合并

圖1  SELECT * FROM T WHERE a=1 AND b='C';執(zhí)行流程

2. Index Merge Union

Index Merge Union會在使用到的多個索引上同時進(jìn)行掃描,并取這些掃描結(jié)果的并集作為最終結(jié)果集。

以“SELECT * FROM T WHERE a=1 OR b='B'; ”語句為例:

• 未使用索引合并時,MySQL通過全表掃描獲取所有記錄信息,隨后再使用條件a=1和b='B'對這些記錄進(jìn)行判斷,獲取最終查詢結(jié)果。

mysql> EXPLAIN SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=1 OR b='B';
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------
| id | select_type | table | partitions | type | possible_keys | key  | key_len | ref  | rows | filtered | Extra       |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
|  1 | SIMPLE      | T     | NULL       | ALL  | idx_a,idx_b   | NULL | NULL    | NULL |    5 |    50.00 | Using where |
+----+-------------+-------+------------+------+---------------+------+---------+------+------+----------+-------------+
1 row in set, 1 warning (0.00 sec)

• 使用索引合并算法時,MySQL分別利用索引idx_a和idx_b獲取滿足條件a=1和b='B'的主鍵id集合setA和setB。隨后,取setA和setB中主鍵id的并集setC,并使用setC中主鍵id進(jìn)行回表,獲取最終查詢結(jié)果。

mysql> EXPLAIN SELECT * FROM T WHERE a=1 OR b='B';
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key         | key_len | ref  | rows | filtered | Extra                                 |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | idx_a,idx_b   | idx_a,idx_b | 4,5     | NULL |    4 |   100.00 | Using union(idx_a,idx_b); Using where |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+---------------------------------------+
1 row in set, 1 warning (0.01 sec)

執(zhí)行流程如下:

MySQL中為什么要使用索引合并(Index Merge)

圖2  SELECT * FROM T WHERE a=1 OR b='B';執(zhí)行流程

3. Index Merge Sort-Union

Sort-Union索引合并與Union索引合并原理相似,只是比單純的Union索引合并多了一步對二級索引記錄的主鍵id排序的過程。由OR連接的多個范圍查詢條件組成的WHERE子句不滿足Union算法時,優(yōu)化器會考慮使用Sort-Union算法。例如:

mysql> EXPLAIN SELECT * FROM T WHERE a<3 OR b<'B';
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key         | key_len | ref  | rows | filtered | Extra                                      |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | idx_a,idx_b   | idx_a,idx_b | 4,5     | NULL |    4 |   100.00 | Using sort_union(idx_a,idx_b); Using where |
+----+-------------+-------+------------+-------------+---------------+-------------+---------+------+------+----------+--------------------------------------------+
1 row in set, 1 warning (0.00 sec)

應(yīng)用場景約束

1. 總體約束

• Index Merge不能應(yīng)用于全文索引(Fulltext Index)。

• Index Merge只能合并同一個表的索引掃描結(jié)果,不能跨表合并。

以上約束適用于Intersection,Union和Sort-Union三種合并類型。此外,Intersection和Union存在特殊的場景約束。

2. Index Merge Intersection

使用Intersection要求AND連接的每個條件必須是如下形式之一:

(1) 當(dāng)索引包含多個列時,每個列都必須被如下等值條件覆蓋,不允許出現(xiàn)范圍查詢。若使用索引為聯(lián)合索引時,每個列都必須等值匹配,不能出現(xiàn)只匹配部分列的情況。

key_par1 = const1 AND key_par2 = const2 ... AND key_partN = constN

(2) 若過濾條件中存在主鍵列,主鍵列可以進(jìn)行范圍匹配。

mysql> EXPLAIN SELECT * FROM T WHERE id<3 AND b='A';
+----+-------------+-------+------------+-------------+---------------+---------------+---------+------+------+----------+---------------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key           | key_len | ref  | rows | filtered | Extra                                       |
+----+-------------+-------+------------+-------------+---------------+---------------+---------+------+------+----------+---------------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | PRIMARY,idx_b | idx_b,PRIMARY | 9,4     | NULL |    1 |   100.00 | Using intersect(idx_b,PRIMARY); Using where |
+----+-------------+-------+------------+-------------+---------------+---------------+---------+------+------+----------+---------------------------------------------+
1 row in set, 1 warning (0.00 sec)

上述的要求,本質(zhì)上是為了確保索引取出的記錄是按照主鍵id有序排列的,因?yàn)镮ndex Merge Intersection對兩個有序集合取交集更簡單。同時,主鍵有序的情況下,回表將不再是單純的隨機(jī)IO,回表的效率也會更高。

3. Index Merge Union

使用Union要求OR連接的每個條件,必須是如下形式之一:

(1) 當(dāng)索引包含多個列時,則每個列都必須被如下等值條件覆蓋,不允許出現(xiàn)范圍查詢。若使用索引為聯(lián)合索引時,在聯(lián)合索引中的每個列都必須等值匹配,不能出現(xiàn)只匹配部分列的情況。

key_par1 = const1 OR key_par2 = const2 ... OR key_partN = constN

(2) 若過濾條件中存在主鍵列,主鍵列可以進(jìn)行范圍匹配。

mysql> EXPLAIN SELECT * FROM T WHERE id>3 OR b='A';
+----+-------------+-------+------------+-------------+---------------+---------------+---------+------+------+----------+-----------------------------------------+
| id | select_type | table | partitions | type        | possible_keys | key           | key_len | ref  | rows | filtered | Extra                                   |
+----+-------------+-------+------------+-------------+---------------+---------------+---------+------+------+----------+-----------------------------------------+
|  1 | SIMPLE      | T     | NULL       | index_merge | PRIMARY,idx_b | PRIMARY,idx_b | 4,5     | NULL |    3 |   100.00 | Using union(PRIMARY,idx_b); Using where |
+----+-------------+-------+------------+-------------+---------------+---------------+---------+------+------+----------+-----------------------------------------+
1 row in set, 1 warning (0.00 sec)

Index Merge的優(yōu)缺點(diǎn)

• Index Merge Intersection在使用到的多個索引上同時進(jìn)行掃描,并取這些掃描結(jié)果的并集作為最終結(jié)果集。

當(dāng)優(yōu)化器根據(jù)搜索條件從某個索引中獲取的記錄數(shù)極多時,適合使用Intersection對取交集后的主鍵id以順序I/O進(jìn)行回表,其開銷遠(yuǎn)小于使用隨機(jī)IO進(jìn)行回表。反之,當(dāng)根據(jù)搜索條件掃描出的記錄極少時,因?yàn)樾枰嘁徊胶喜⒉僮?,Intersection反而不占優(yōu)勢。在8.0.22版本,對于AND連接的點(diǎn)查場景,通過建立聯(lián)合索引可以更好的減少回表。

• Index Merge Union在使用到的多個索引上同時進(jìn)行掃描,并取這些掃描結(jié)果的并集作為最終結(jié)果集。

當(dāng)優(yōu)化器根據(jù)搜索條件從某個索引中獲取的記錄數(shù)比較少,通過Union索引合并后進(jìn)行訪問的代價比全表掃描更小時,使用Union的效果才會更優(yōu)。

• Index Merge Sort-Union比單純的Union索引合并多了一步對索引記錄的主鍵id排序的過程。

當(dāng)優(yōu)化器根據(jù)搜索條件從某個索引中獲取的記錄數(shù)比較少的時,對這些索引記錄的主鍵id進(jìn)行排序的成本不高,此時可以加速查詢。反之,當(dāng)需要排序的記錄過多時,該算法的查詢效率不一定更優(yōu)。

我們以Index Merge Union為例,對上述分析進(jìn)行驗(yàn)證。

1. 場景構(gòu)造

# 創(chuàng)建表CREATE TABLE T(  `id` int NOT NULL AUTO_INCREMENT,
`a` int NOT NULL,`
b` char(1) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `idx_a` (`a`) USING BTREE,
KEY `idx_b` (`b`) USING BTREE
)ENGINE=InnoDB AUTO_INCREMENT=1;

# 插入數(shù)據(jù)
DELIMITER $$
CREATE PROCEDURE insertT()
BEGIN
DECLARE i INT DEFAULT 0;
START TRANSACTION;
WHILE i<=100000 do
if (i%100 = 0) then
INSERT INTO T (a, b) VALUES (10,CHAR(rand()*(90-65)+65));
else
INSERT INTO T (a, b) VALUES (i,CHAR(rand()*(90-65)+65));
end if;
SET i=i+1;
END WHILE;
COMMIT;
END$$
DELIMITER ;
call insertT();

# 執(zhí)行測試語句
SQL1: SELECT * FROM T WHERE a=101 OR b='A';
SQL2: SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=101 OR b='A';
SQL3: SELECT * FROM T WHERE a=10 OR b='A';
SQL4: SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=10 OR b='A';

2. 執(zhí)行結(jié)果及分析

每條語句查詢5次,去掉最大值和最小值,取剩余三次結(jié)果平均值。4條語句查詢結(jié)果如下:

測試語句

第一次查詢/ms

第二次查詢/ms

第三次查詢/ms

第四次查詢/ms

第五次查詢/ms

平均值/ms

SQL1

5.481

5.422

5.117

4.892

5.426

5.322

SQL2

31.129

32.645

30.943

31.142

32.625

31.632

SQL3

7.872

7.200

7.824

7.955

7.949

7.882

SQL4

31.139

33.318

31.476

31.645

31.27

31.464

對比使用索引合并的SQL1和未使用索引合并的SQL2的查詢結(jié)果可知,使用索引合并的SQL1具有更高的查詢效率,這點(diǎn)從語句的explain analyze分析中也可以看出:

使用索引合并的SQL1代碼示例:

EXPLAIN ANALYZE SELECT * FROM T WHERE a=101 OR b='A';
-> Filter: ((t.a = 101) or (t.b = 'A'))  (cost=717.14 rows=2056) (actual time=0.064..5.481 rows=2056 loops=1)
-> Index range scan on T using union(idx_a,idx_b)  (cost=717.14 rows=2056) (actual time=0.062..5.120 rows=2056 loops=1)

未使用索引合并的SQL2代碼示例:

EXPLAIN ANALYZE SELECT /*+ NO_INDEX_MERGE(T idx_a,idx_b) */ * FROM T WHERE a=101 OR b='A';
-> Filter: ((t.a = 101) or (t.b = 'A'))  (cost=10098.75 rows=10043) (actual time=0.038..31.129 rows=2056 loops=1)
-> Table scan on T  (cost=10098.75 rows=100425) (actual time=0.031..22.967 rows=100001 loops=1)

未使用索引合并時,SQL2語句需要花費(fèi)約23ms來掃描全表100001行數(shù)據(jù),隨后再進(jìn)行條件判斷。而使用索引合并時,通過合并兩個索引篩選出的主鍵id集合,篩選出2056個符合條件的主鍵id, 隨后回表獲取最終的數(shù)據(jù)。這個環(huán)節(jié)中,索引合并大大減少了需要訪問的記錄數(shù)量。

此外,從SQL1和SQL3的查詢結(jié)果也可以看出,數(shù)據(jù)分布也會影響索引合并的效果。相同的SQL模板類型,根據(jù)匹配數(shù)值的不同,查詢時間存在差異。如需要合并的主鍵id集合越小,需要回表的主鍵id越少,查詢時間越短。

EXPLAIN ANALYZE SELECT * FROM T WHERE a=101 OR b='A';
-> Filter: ((t.a = 101) or (t.b = 'A'))  (cost=717.14 rows=2056) (actual time=0.064..5.481 rows=2056 loops=1)
   -> Index range scan on T using union(idx_a,idx_b)  (cost=717.14 rows=2056) (actual time=0.062..5.120 rows=2056 loops=1)

EXPLAIN ANALYZE SELECT * FROM T WHERE a=10 OR b='A';
-> Filter: ((t.a = 10) or (t.b = 'A'))  (cost=983.00 rows=3057) (actual time=0.070..7.872 rows=3035 loops=1)
   -> Index range scan on T using union(idx_a,idx_b)  (cost=983.00 rows=3057) (actual time=0.068..7.496 rows=3035 loops=1)

總結(jié)

本文介紹了索引合并(Index Merge)包含的三種類型,即交集(intersection)、并集(union)和排序并集(sort-union),以及索引合并的實(shí)現(xiàn)原理、場景約束與通過案例驗(yàn)證的優(yōu)缺點(diǎn)。在實(shí)際使用中,當(dāng)查詢條件列較多且無法使用聯(lián)合索引時,就可以考慮使用索引合并,利用多個索引加速查詢。但要注意,索引合并并非在任何場景下均具有較好的效果,需要結(jié)合具體的數(shù)據(jù)分布進(jìn)行算法的選擇。

到此這篇關(guān)于MySQL使用索引合并(Index Merge)提高查詢效率的文章就介紹到這了,更多相關(guān)MySQL索引合并優(yōu)化及底層原理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MySql數(shù)據(jù)庫基礎(chǔ)之分組查詢詳解

    MySql數(shù)據(jù)庫基礎(chǔ)之分組查詢詳解

    這篇文章主要介紹了mysql按照時間分組查詢的語句,非常實(shí)用,sql語句簡單易懂,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • 深入了解Mysql邏輯架構(gòu)

    深入了解Mysql邏輯架構(gòu)

    這篇文章主要介紹了深入了解Mysql邏輯架構(gòu)的原因,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下
    2020-12-12
  • MySQL 5.0.16亂碼問題的解決方法

    MySQL 5.0.16亂碼問題的解決方法

    這篇文章主要介紹了MySQL 5.0.16亂碼問題的解決方法,需要的朋友可以參考下
    2015-10-10
  • 詳解Mysql基礎(chǔ)語法的使用

    詳解Mysql基礎(chǔ)語法的使用

    MySQL是一個關(guān)系型數(shù)據(jù)庫管理系統(tǒng),由瑞典MySQL AB 公司開發(fā),目前屬于 Oracle 旗下產(chǎn)品。這篇文章主要介紹了Mysql基礎(chǔ)語法的使用,需要的朋友可以參考下
    2018-07-07
  • 一文深入理解MySQL中的UTF-8與UTF-8MB4字符集

    一文深入理解MySQL中的UTF-8與UTF-8MB4字符集

    在全球化的今天,數(shù)據(jù)的存儲與處理需要支持多種語言與字符集,對于 Web 應(yīng)用程序和數(shù)據(jù)庫系統(tǒng)來說,字符集的選擇尤為重要,特別是在處理包含多種語言字符(如中文、阿拉伯文、表情符號等)的系統(tǒng)中,本文將深入探討 MySQL 中的兩個常見字符集:UTF-8 和 UTF-8MB4
    2024-11-11
  • mysql配置SSL證書登錄的實(shí)現(xiàn)

    mysql配置SSL證書登錄的實(shí)現(xiàn)

    應(yīng)國家等級保護(hù)三級安全要求,mysql 的 ssl 需要安全證書加密,本文主要介紹了mysql配置SSL證書登錄,感興趣的可以了解一下
    2021-09-09
  • mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié)

    mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié)

    這篇文章主要介紹了mysql中數(shù)據(jù)庫覆蓋導(dǎo)入的幾種方式總結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-03-03
  • mysql建庫時提示Specified key was too long max key length is 1000 bytes的問題的解決方法

    mysql建庫時提示Specified key was too long max key length is 1000

    本文將詳細(xì)提供mysql建庫時提示Specified key was too long max key length is 1000 bytes的問題的解決方法,有需求的朋友可以參考
    2012-11-11
  • mysql索引學(xué)習(xí)教程

    mysql索引學(xué)習(xí)教程

    在mysql 中,索引可以分為兩種類型 hash索引和 btree索引。這篇文章主要介紹了mysql索引的相關(guān)知識,非常不錯,具有參考借鑒價值,感興趣的朋友一起看看吧
    2016-09-09
  • mysql5.7單實(shí)例自啟動服務(wù)配置過程

    mysql5.7單實(shí)例自啟動服務(wù)配置過程

    這篇文章主要介紹了mysql5.7單實(shí)例自啟動服務(wù)配置的過程,附含配置源碼,有需要的朋友可以借鑒參考下,希望可以有所幫助,感謝閱讀
    2021-09-09

最新評論