mysql允許在相同列上建立多個索引,無論是有意還是無意,mysql需要單獨維護重複的索引,並且優化器在優化查詢的時候也需要逐個考慮,這會影響效能。
重複索引是指的在相同的列上按照相同的順序建立的相同類型的索引,應該避免這樣建立重複索引,發現以後也應該立即刪除。但,在相同的列上建立不同類型的索引來滿足不同的查詢需求是可以的。
CREATE TABLE test( ID INT NOT NULL PRIMARY KEY, A INT NOT NULL, B INT NOT NULL, UNIQUE(ID), INDEX(ID), ) ENGINE=InnoDB;
這段SQL建立了3個重複索引。通常並沒有理由這麼做。
冗餘索引和重複索引有一些不同,如果創建了索引(a,b),再創建索引(a)就是冗餘索引,因為這只是前面一個索引的前綴索引,因此(a ,b)也可以當作(a)來使用,但是(b,a)就不是冗餘索引,索引(b)也不是,因為b不是索引(a,b)的最左前綴列,另外,其他不同類型的索引在相同欄位上建立(如雜湊索引和全文索引)不會是B-Tree索引的冗餘索引,而無論覆蓋的索引列是什麼。
冗餘索引通常發生再為表格新增索引的時候。例如,有人可能會增加一個新的索引(A,B)而不是擴展以後的索引(A)。還有一種情況是將一個索引擴展為(A,ID),其中ID是主鍵,對於InnoDB來說主鍵已經包含在二級索引中了,所以這也是冗餘的。
大多數情況下都不需要冗餘索引,應該盡量擴展已有的索引而不是創建新索引,但也有時候處於性能方面的考慮需要冗餘索引,因為擴展已有的索引會導致其變得太大,從而影響其他使用該索引的查詢效能。如:如果在整數列上有一個索引,現在需要額外增加一個很長的varchar列來擴展該索引,那麼性可能會急劇下降,特別是有查詢把這個索引當作覆蓋索引,或者這是myisam表而且有很多範圍查詢的時候(由於myisam的前綴壓縮)
比如,有一張userinfo表。這個表有1000000筆數據,對每個state_id值大概有20000筆記錄。在state_id有一個索引,那麼下面的SQL我們稱為Q1
SELECT count(*) FROM userinfo WHERE state_id=5; --Q1
改查詢的執行速度大概是每秒115次(QPS)
還有一個SQL,我們稱為Q2
SELECT state_id,city,address FROM userinfo WHERE state_id=5; --Q2
這個查詢的QPS是10,提升該索引性能最簡單的辦法就是狂戰索引為(state_id, city,address),讓索引可以覆寫查詢:
ALERT TABLE userinfo ADD KEY state_id_2(state_id,city,address);
(註:state_id已經有索引了,根據前面的概念,這是一個冗餘索引而不是重複索引)
怎麼找出冗餘索引和重複索引呢?
1.可以使用Shlomi Noach的common_schema中的一些試圖來定位,common_schema是一系列可以安裝到伺服器上的常用的儲存和試圖。
2.可以使用Percona Toolkit中的pt_duplicate-key-checker,該工具透過分析表結構來找出冗餘和重複的索引。
以上是mysql中關於冗餘和重複索引的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于架构原理的相关内容,MySQL Server架构自顶向下大致可以分网络连接层、服务层、存储引擎层和系统文件层,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用char()和REPLACE()函数来替换换行符;REPLACE()函数可以用新字符串替换列中的换行符,而换行符可使用“char(13)”来表示,语法为“replace(字段名,char(13),'新字符串') ”。

mysql的msi与zip版本的区别:1、zip包含的安装程序是一种主动安装,而msi包含的是被installer所用的安装文件以提交请求的方式安装;2、zip是一种数据压缩和文档存储的文件格式,msi是微软格式的安装包。

方法:1、利用right函数,语法为“update 表名 set 指定字段 = right(指定字段, length(指定字段)-1)...”;2、利用substring函数,语法为“select substring(指定字段,2)..”。

转换方法:1、利用cast函数,语法“select * from 表名 order by cast(字段名 as SIGNED)”;2、利用“select * from 表名 order by CONVERT(字段名,SIGNED)”语句。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了关于MySQL复制技术的相关问题,包括了异步复制、半同步复制等等内容,下面一起来看一下,希望对大家有帮助。

本篇文章给大家带来了关于mysql的相关知识,其中主要介绍了mysql高级篇的一些问题,包括了索引是什么、索引底层实现等等问题,下面一起来看一下,希望对大家有帮助。

在mysql中,可以利用REGEXP运算符判断数据是否是数字类型,语法为“String REGEXP '[^0-9.]'”;该运算符是正则表达式的缩写,若数据字符中含有数字时,返回的结果是true,反之返回的结果是false。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 英文版
推薦:為Win版本,支援程式碼提示!

EditPlus 中文破解版
體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版
SublimeText3 Linux最新版