国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

MySQL8.0索引新特性

這篇具有很好參考價(jià)值的文章主要介紹了MySQL8.0索引新特性。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。



MySQL8.0索引新特性,MySQL,mysql,mysql8.0,mysql索引,數(shù)據(jù)庫

MySQL8.0索引新特性,MySQL,mysql,mysql8.0,mysql索引,數(shù)據(jù)庫

1 支持降序索引

image.png
舉例:分別在MySQL 5.7版本和MySQL 8.0版本中創(chuàng)建數(shù)據(jù)表ts1,結(jié)果如下:

CREATE TABLE ts1(
  a int,
  b int,
  index idx_a_b(a,b desc)
);

在MySQL 5.7版本中查看數(shù)據(jù)表ts1的結(jié)構(gòu),從結(jié)果可以看出,索引仍然是默認(rèn)的升序。

在MySQL 8.0版本中查看數(shù)據(jù)表ts1的結(jié)構(gòu),從結(jié)果可以看出,索引已經(jīng)是降序了。下面繼續(xù)測試降序索引在執(zhí)行計(jì)劃中的表現(xiàn)。

分別在MySQL 5.7版本和MySQL 8.0版本的數(shù)據(jù)表ts1中插入800條隨機(jī)數(shù)據(jù),執(zhí)行語句如下:

DELIMITER //
CREATE PROCEDURE ts_insert()
BEGIN
  DECLARE i INT DEFAULT 1;
  WHILE i < 800
  DO
    insert into ts1 select rand()80000,rand()80000;
    SET i = i + 1;
  END WHILE;
  commit;
END //
DELIMITER ;

# 調(diào)用
CALL ts_insert();


在MySQL 5.7版本中查看數(shù)據(jù)表ts1的執(zhí)行計(jì)劃,結(jié)果如下:

EXPLAIN SELECT * FROM ts1 ORDER BY a,b DESC LIMIT 5;

從結(jié)果可以看出,執(zhí)行計(jì)劃中掃描數(shù)為799,而且使用了Using filesort。
提示 Using filesort是MySQL中一種速度比較慢的外部排序,能避免是最好的。多數(shù)情況下,管理員
可以通過優(yōu)化索引來盡量避免出現(xiàn)Using filesort,從而提高數(shù)據(jù)庫執(zhí)行速度。

在MySQL 8.0版本中查看數(shù)據(jù)表ts1的執(zhí)行計(jì)劃。從結(jié)果可以看出,執(zhí)行計(jì)劃中掃描數(shù)為5,而且沒有使用
Using filesort。
注意 降序索引只對查詢中特定的排序順序有效,如果使用不當(dāng),反而查詢效率更低。例如,上述
查詢排序條件改為order by a desc, b desc,MySQL 5.7的執(zhí)行計(jì)劃要明顯好于MySQL 8.0。

將排序條件修改為order by a desc, b desc后,下面來對比不同版本中執(zhí)行計(jì)劃的效果。 在MySQL 5.7版本
中查看數(shù)據(jù)表ts1的執(zhí)行計(jì)劃,結(jié)果如下:

EXPLAIN SELECT * FROM ts1 ORDER BY a DESC,b DESC LIMIT 5;

在MySQL 8.0版本中查看數(shù)據(jù)表ts1的執(zhí)行計(jì)劃。
從結(jié)果可以看出,修改后MySQL 5.7的執(zhí)行計(jì)劃要明顯好于MySQL 8.0。

2 隱藏索引

在MySQL 5.7版本及之前,只能通過顯式的方式刪除索引。此時(shí),如果發(fā)現(xiàn)刪除索引后出現(xiàn)錯(cuò)誤,又只能
通過顯式創(chuàng)建索引的方式將刪除的索引創(chuàng)建回來。如果數(shù)據(jù)表中的數(shù)據(jù)量非常大,或者數(shù)據(jù)表本身比較
大,這種操作就會消耗系統(tǒng)過多的資源,操作成本非常高。

從MySQL 8.x 開始支持 隱藏索引(invisible indexes) ,只需要將待刪除的索引設(shè)置為隱藏索引,使
查詢優(yōu)化器不再使用這個(gè)索引(即使使用force index(強(qiáng)制使用索引),優(yōu)化器也不會使用該索引),
確認(rèn)將索引設(shè)置為隱藏索引后系統(tǒng)不受任何響應(yīng),就可以徹底刪除索引。 這種通過先將索引設(shè)置為隱藏索
引,再刪除索引的方式就是軟刪除 。

同時(shí)你想驗(yàn)證某個(gè)索引刪除之后的 查詢性能影響就可以暫時(shí)先隱藏起來。

注意:主鍵不能被設(shè)置為隱藏索引。當(dāng)表中沒有顯示主鍵時(shí),表中的第一個(gè)唯一非空索引會成為隱式主鍵,也不能設(shè)置為隱藏索引。

image.png

  1. 創(chuàng)建表時(shí)直接創(chuàng)建

在MySQL中創(chuàng)建隱藏索引通過SQL語句INVISIBLE來實(shí)現(xiàn),其語法形式如下:

CREATE TABLE tablename(
propname1 type1[CONSTRAINT1],
propname2 type2[CONSTRAINT2],
……
propnamen typen,
INDEX [indexname](propname1 [(length)]) INVISIBLE
);

上述語句比普通索引多了一個(gè)關(guān)鍵字INVISIBLE,用來標(biāo)記索引為不可見索引。

  1. 在已經(jīng)存在的表上創(chuàng)建
    可以為已經(jīng)存在的表設(shè)置隱藏索引,其語法形式如下:
CREATE INDEX indexname
ON tablename(propname[(length)]) INVISIBLE;
  1. 通過ALTER TABLE語句創(chuàng)建
    語法形式如下:
ALTER TABLE tablename
ADD INDEX indexname (propname [(length)]) INVISIBLE;
  1. 切換索引可見狀態(tài) 已存在的索引可通過如下語句切換可見狀態(tài):
ALTER TABLE tablename ALTER INDEX index_name INVISIBLE; #切換成隱藏索引
ALTER TABLE tablename ALTER INDEX index_name VISIBLE; #切換成非隱藏索引

如果將index_cname索引切換成可見狀態(tài),通過explain查看執(zhí)行計(jì)劃,發(fā)現(xiàn)優(yōu)化器選擇了index_cname索
引。
注意 當(dāng)索引被隱藏時(shí),它的內(nèi)容仍然是和正常索引一樣實(shí)時(shí)更新的。如果一個(gè)索引需要長期被隱
藏,那么可以將其刪除,因?yàn)樗饕拇嬖跁绊懖迦?、更新和刪除的性能。

通過設(shè)置隱藏索引的可見性可以查看索引對調(diào)優(yōu)的幫助。

  1. 使隱藏索引對查詢優(yōu)化器可見
    在MySQL 8.x版本中,為索引提供了一種新的測試方式,可以通過查詢優(yōu)化器的一個(gè)開關(guān)
    (use_invisible_indexes)來打開某個(gè)設(shè)置,使隱藏索引對查詢優(yōu)化器可見。如果 use_invisible_indexes
    設(shè)置為off(默認(rèn)),優(yōu)化器會忽略隱藏索引。如果設(shè)置為on,即使隱藏索引不可見,優(yōu)化器在生成執(zhí)行計(jì)
    劃時(shí)仍會考慮使用隱藏索引。


(1)在MySQL命令行執(zhí)行如下命令查看查詢優(yōu)化器的開關(guān)設(shè)置。

mysql> select @@optimizer_switch \G

在輸出的結(jié)果信息中找到如下屬性配置

use_invisible_indexes=off

此屬性配置值為off,說明隱藏索引默認(rèn)對查詢優(yōu)化器不可見。

(2)使隱藏索引對查詢優(yōu)化器可見,需要在MySQL命令行執(zhí)行如下命令:

mysql> set session optimizer_switch="use_invisible_indexes=on";
Query OK, 0 rows affected (0.00 sec)

SQL語句執(zhí)行成功,再次查看查詢優(yōu)化器的開關(guān)設(shè)置。

mysql> select @@optimizer_switch \G
*************************** 1. row ***************************
@@optimizer_switch:
index_merge=on,index_merge_union=on,index_merge_sort_union=on,index_merge_
intersection=on,engine_condition_pushdown=on,index_condition_pushdown=on,mrr=on,mrr_co
st_based=on,block_nested_loop=on,batched_key_access=off,materialization=on,semijoin=on
,loosescan=on,firstmatch=on,duplicateweedout=on,subquery_materialization_cost_based=on
,use_index_extensions=on,condition_fanout_filter=on,derived_merge=on,use_invisible_ind
exes=on,skip_scan=on,hash_join=on
1 row in set (0.00 sec)

此時(shí),在輸出結(jié)果中可以看到如下屬性配置

use_invisible_indexes=on

use_invisible_indexes屬性的值為on,說明此時(shí)隱藏索引對查詢優(yōu)化器可見。

(3)使用EXPLAIN查看以字段invisible_column作為查詢條件時(shí)的索引使用情況。

explain select * from classes where cname = '高一2班';

查詢優(yōu)化器會使用隱藏索引來查詢數(shù)據(jù)。

(4)如果需要使隱藏索引對查詢優(yōu)化器不可見,則只需要執(zhí)行如下命令即可。

mysql> set session optimizer_switch="use_invisible_indexes=off";
Query OK, 0 rows affected (0.00 sec)

再次查看查詢優(yōu)化器的開關(guān)設(shè)置

mysql> select @@optimizer_switch \G

此時(shí),use_invisible_indexes屬性的值已經(jīng)被設(shè)置為“off”。


MySQL8忘記密碼:https://blog.csdn.net/weixin_44714097/article/details/127055715



MySQL8.0索引新特性,MySQL,mysql,mysql8.0,mysql索引,數(shù)據(jù)庫文章來源地址http://www.zghlxwxcb.cn/news/detail-600283.html

到了這里,關(guān)于MySQL8.0索引新特性的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • MySQL8.0數(shù)據(jù)庫超詳細(xì)安裝教程全過程

    MySQL8.0數(shù)據(jù)庫超詳細(xì)安裝教程全過程

    1、官網(wǎng)下載MySQL8.0地址:MySQL :: Download MySQL Installer (Archived Versions) 2、 雙擊安裝包進(jìn)行安裝 3、自定義安裝 4、選擇MySQL Server8.0 ? 5、創(chuàng)建MYSQL數(shù)據(jù)存儲目錄及安裝目錄 6、配置安裝路徑及數(shù)據(jù)存儲目錄 7、確認(rèn)繼續(xù) 8、選擇MySQL,下一步 9、開始安裝 10、第一次安裝需要C++的依賴

    2024年02月08日
    瀏覽(38)
  • centos9 mysql8修改數(shù)據(jù)庫的存儲路徑

    centos9 mysql8修改數(shù)據(jù)庫的存儲路徑

    系統(tǒng):CentOS Stream release 9 mysql版本:mysql Ver 8.0.34 for Linux on x86_64 (MySQL Community Server - GPL) 查看目錄數(shù)據(jù)存儲的位置 操作 1、新建存放的目錄,拷貝原數(shù)據(jù)庫內(nèi)容到新建目錄 關(guān)閉selinux 永久關(guān)閉 vi /etc/selinux/config 設(shè)置 SELINUX=disabled,即可 2、修改mysql配置文件 my.cnf內(nèi)容如下 3、重新

    2024年02月11日
    瀏覽(27)
  • mysql8.0無法創(chuàng)建數(shù)據(jù)庫 解決root無法授權(quán)問題

    mysql的賦權(quán)操作:GRANT ALL PRIVILEGES ON *.* TO ‘root‘@‘%‘ IDENTIFIED BY ‘你的密碼‘ WITH GRANT OPTION; mysql賦權(quán)操作: use mysql; GRANT ALL PRIVILEGES ON *.* TO \\\'root\\\'@\\\'%\\\' IDENTIFIED BY \\\'你的密碼\\\' WITH GRANT OPTION; flush privileges; GRANT:賦權(quán)命令 ALL PRIVILEGES:當(dāng)前用戶的所有權(quán)限 ON:介詞 *.*:當(dāng)前用戶

    2024年02月12日
    瀏覽(26)
  • 關(guān)系數(shù)據(jù)庫-9-[mysql8]中的語法校驗(yàn)規(guī)則sql_mode應(yīng)用

    Mysql中sql_mode使用詳解 sql_mode是一組mysql的語法校驗(yàn)規(guī)則,定義了mysql應(yīng)該支持的sql語法、數(shù)據(jù)校驗(yàn)等。 1.3.1 ANSI模式 這是一種寬松模式,該模式下,會對所操作數(shù)據(jù)進(jìn)行校驗(yàn),如果不符合校驗(yàn)規(guī)則,數(shù)據(jù)會按照規(guī)則執(zhí)行,并報(bào)warning警告。 1.3.2 STRICT_TRANS_TABLES模式 這是一種嚴(yán)格

    2024年02月02日
    瀏覽(21)
  • java通過JDBC連接mysql8.0數(shù)據(jù)庫,并對數(shù)據(jù)庫中的表進(jìn)行增刪改查操作

    java通過JDBC連接mysql8.0數(shù)據(jù)庫,并對數(shù)據(jù)庫中的表進(jìn)行增刪改查操作

    目錄 一、JDBC簡介 二、添加依賴 三、JDBC操作數(shù)據(jù)庫的步驟 四、JDBC操作數(shù)據(jù)庫——增刪改查 (一)新增數(shù)據(jù) (二)刪除數(shù)據(jù) (三)修改數(shù)據(jù) (四)查詢數(shù)據(jù) (五)多表連接查詢 ????????Java數(shù)據(jù)庫連接,(Java Database Connectivity,簡稱JDBC)是java語言中用來規(guī)范客戶端程序如何來訪問數(shù)

    2024年02月03日
    瀏覽(710)
  • 從0到1阿里云部署mysql8數(shù)據(jù)庫(外網(wǎng)可訪問)(圖文并茂超詳細(xì))

    從0到1阿里云部署mysql8數(shù)據(jù)庫(外網(wǎng)可訪問)(圖文并茂超詳細(xì))

    目錄 一,下載MYSQL安裝和配置 ?二,外網(wǎng)連接阿里云數(shù)據(jù)庫 1.切換到 /app/soft/ 2.創(chuàng)建mysql文件夾 3.切換到mysql文件夾下 4,下載mysql8.0安裝包,等待下載成功 5,解壓mysql8.0安裝包 ?6,重命名解壓出來的文件夾,這里改成mysql-8.0 ?7,mysql-8.0文件夾下創(chuàng)建data文件夾 存儲文件 8,分別

    2024年02月02日
    瀏覽(23)
  • Docker的使用教程、學(xué)習(xí)筆記,附實(shí)戰(zhàn):部署chatgpt網(wǎng)頁版ui,部署mysql8數(shù)據(jù)庫

    Docker的使用教程、學(xué)習(xí)筆記,附實(shí)戰(zhàn):部署chatgpt網(wǎng)頁版ui,部署mysql8數(shù)據(jù)庫

    作者:ChenZhen 博客地址:https://www.chenzhen.space/ 版權(quán):來自b站視頻 【SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系統(tǒng)詳解springcloud微服務(wù)技術(shù)棧課程|黑馬程序員Java微服務(wù)】 因?yàn)楹隈R的課件ppt做的實(shí)在是太好了,基本就是原樣copy過來整理一下。 如果對你有幫助,請給一個(gè)小小的

    2024年02月04日
    瀏覽(39)
  • Qt+MySql開發(fā)筆記:Qt5.9.3的msvc2017x64版本編譯MySql8.0.16版本驅(qū)動并Demo連接數(shù)據(jù)庫測試

    Qt+MySql開發(fā)筆記:Qt5.9.3的msvc2017x64版本編譯MySql8.0.16版本驅(qū)動并Demo連接數(shù)據(jù)庫測試

    若該文為原創(chuàng)文章,轉(zhuǎn)載請注明原文出處 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/130381428 紅胖子網(wǎng)絡(luò)科技博文大全:開發(fā)技術(shù)集合(包含Qt實(shí)用技術(shù)、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、單片機(jī)、軟硬結(jié)合等等)持續(xù)更新中… ??mysql驅(qū)動版本msvc2015x32版本調(diào)

    2023年04月26日
    瀏覽(50)
  • MySQL8的特性-MySQL8知識詳解

    MySQL8的特性-MySQL8知識詳解

    MySQL是一個(gè)多用戶、多線程的SQL數(shù)據(jù)庫服務(wù)器。SQL(結(jié)構(gòu)化查詢語言)是世界上最流行和標(biāo)準(zhǔn)化的數(shù)據(jù)庫語言。下面是MySQL的特性。 1、開源性:MySQL是一個(gè)開源的關(guān)系型數(shù)據(jù)庫管理系統(tǒng),可以免費(fèi)使用和修改。 2、可靠性:MySQL具有高度的穩(wěn)定性和可靠性,能夠處理大量的并發(fā)

    2024年02月13日
    瀏覽(16)
  • MySQL8新特性:窗口函數(shù)(精講)

    MySQL8新特性:窗口函數(shù)(精講)

    本博主將用CSDN記錄軟件開發(fā)求學(xué)之路上親身所得與所學(xué)的心得與知識,有興趣的小伙伴可以關(guān)注博主! 也許一個(gè)人獨(dú)行,可以走的很快,但是一群人結(jié)伴而行,才能走的更遠(yuǎn)! 假設(shè)我現(xiàn)在有這樣一個(gè)數(shù)據(jù)表,它顯示了某購物網(wǎng)站在每個(gè)城市每個(gè)區(qū)的銷售額: 查詢: 需求:

    2024年02月13日
    瀏覽(27)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包