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

MySQL 隔離數(shù)據(jù)列和前綴索引的使用總結(jié)

 更新時(shí)間:2021年05月14日 09:47:40   作者:島上碼農(nóng)  
正確地創(chuàng)建和使用索引對(duì)于查詢性能十分重要。由于存在很多種特殊場(chǎng)景的優(yōu)化和行為,因此有很多種方式去有效選擇和使用索引。因此,決定如何使用索引這一項(xiàng)技能是需要經(jīng)驗(yàn)和時(shí)間的積累去培養(yǎng)的。以下會(huì)介紹一些如何有效使用索引的方法。

隔離數(shù)據(jù)列

通常,我們會(huì)發(fā)現(xiàn)查詢語(yǔ)句會(huì)妨礙MySQL使用索引。除非在查詢語(yǔ)句中列是獨(dú)立的,否則MySQL不會(huì)使用這些列的索引。“隔離”的意思是索引列不應(yīng)該成為表達(dá)式的一部分或者在一個(gè)查詢函數(shù)體中。例如下面的例子就不會(huì)命中actor_id這個(gè)索引。

SELECT `actor_id` FROM `actor` WHERE `actor_id` + 1 = 2;

對(duì)于人來(lái)說(shuō),很容易知道查詢條件實(shí)際是actor_id = 4,但是MySQL不會(huì)這么處理,因此養(yǎng)成簡(jiǎn)化WHERE判決條件的習(xí)慣,這意味著索引列獨(dú)立地在比較操作符的一側(cè)。下面是另外一個(gè)普遍錯(cuò)誤的案例:

SELECT ... WHERE TO_DAYS(CURRENT_DATE) - TO_DAYS(date_col) <= 10;

前綴索引和索引的選擇性

有時(shí)候需要在很長(zhǎng)字符的列上建立索引,但這樣會(huì)導(dǎo)致索引占據(jù)的空間很大且查詢變慢。一個(gè)策略是使用哈希索引模擬,但有時(shí)候這未必是足夠好,這個(gè)時(shí)候該怎么做?

通常是可以將索引列前面的部分字符建立索引來(lái)替換全字段索引提高性能和節(jié)省空間。但這種方式會(huì)使得選擇性變差。索引的選擇性是指獨(dú)立的索引值篩選出的數(shù)據(jù)占整個(gè)數(shù)據(jù)集合的比例。高選擇性的索引可以讓MySQL過(guò)濾掉更多無(wú)關(guān)的數(shù)據(jù)。例如,一個(gè)唯一索引的選擇性是1。 列的前綴通常在選擇性方面已經(jīng)能夠提供足夠好的性能。如果使用BLOB或TEXT或非常長(zhǎng)的VARCHAR字段列,你必須定義前綴索引,以為MySQL不允許做全長(zhǎng)度索引。

你需要在使用更長(zhǎng)的前綴以獲得更好的選擇性和足夠短的前綴以節(jié)省存儲(chǔ)空間之間平衡。為了確定一個(gè)合適的前綴長(zhǎng)度,查找出最高頻的值,然后和最頻繁的前綴進(jìn)行比較。例如以城市數(shù)據(jù)表為例,我們可以使用如下的語(yǔ)句統(tǒng)計(jì):

SELECT COUNT(*) as cnt, `name` FROM `common_city` GROUP BY `name` ORDER BY cnt DESC LIMIT 10

可以看到這些城市名稱(chēng)出現(xiàn)的次數(shù)比較多。現(xiàn)在我們可以使用1個(gè)字的前綴查找最為頻繁的城市名稱(chēng)前綴。

SELECT COUNT(*) as cnt, LEFT(`name`, 1) as pref FROM `common_city` GROUP BY pref ORDER BY cnt DESC LIMIT 10

可以看到1個(gè)字找出來(lái)的數(shù)據(jù)集更多了,這會(huì)導(dǎo)致獨(dú)立選中的機(jī)會(huì)越少,因此需要調(diào)整一下前綴的長(zhǎng)度。例如調(diào)到3個(gè)字。

SELECT COUNT(*) as cnt, LEFT(`name`, 3) as pref FROM `common_city` GROUP BY pref ORDER BY cnt DESC LIMIT 10

可以看到這和全長(zhǎng)度的相差不多,那實(shí)際三個(gè)字的前綴就夠了(原文使用的是英文城市數(shù)據(jù)表,字符會(huì)更多)。另外一種方式是使用不同長(zhǎng)度的前綴數(shù)量與全字段數(shù)量的比例評(píng)估多少合適。例如:

SELECT 
  COUNT(DISTINCT LEFT(`name`, 1)) / COUNT(`name`) as pref1, 
  COUNT(DISTINCT LEFT(`name`, 2)) / COUNT(`name`) as pref2, 
  COUNT(DISTINCT LEFT(`name`, 3)) / COUNT(`name`) as pref3, 
  COUNT(DISTINCT LEFT(`name`, 4)) / COUNT(`name`) as pref4 
FROM `common_city`

數(shù)值越接近于1效果越好,但是也可以看到,隨著前綴長(zhǎng)度的加長(zhǎng)改善的空間越小。只看平均值并不是一個(gè)好主意,還需要檢查一下最壞情況。也許會(huì)覺(jué)得3-4個(gè)字足夠了,但是如果數(shù)據(jù)分布很不均勻,那可能會(huì)存在陷阱。因此還需要檢查一下前綴少的是不是存在一個(gè)前綴對(duì)應(yīng)的數(shù)據(jù)與其他相比極其多的情況。最后可以給指定的列加前綴索引。

ALTER TABLE `common_city` ADD KEY (name(3));

前綴索引在節(jié)省空間和提高效率方面表現(xiàn)不錯(cuò),但是也有缺陷,那就是在ORDER BY和GROUP BY上無(wú)法使用索引(實(shí)際驗(yàn)證在MySQL 5.7以上版本也有用)。另外一種常見(jiàn)的場(chǎng)景是在較長(zhǎng)的十六進(jìn)制字符串中,例如存儲(chǔ)的sessionId,取前8位前綴做索引將過(guò)濾很多無(wú)關(guān)數(shù)據(jù),效果很好。

以上就是MySQL 隔離數(shù)據(jù)列和前綴索引的使用總結(jié)的詳細(xì)內(nèi)容,更多關(guān)于MySQL 隔離數(shù)據(jù)列和前綴索引的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • MySQL遠(yuǎn)程無(wú)法連接的一些常見(jiàn)原因總結(jié)

    MySQL遠(yuǎn)程無(wú)法連接的一些常見(jiàn)原因總結(jié)

    有的小伙伴發(fā)現(xiàn)自己的mysql無(wú)法正常連接遠(yuǎn)程服務(wù)器,下面這篇文章主要給大家介紹了關(guān)于MySQL遠(yuǎn)程無(wú)法連接的一些常見(jiàn)原因,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-09-09
  • 圖文詳解Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間

    圖文詳解Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間

    寫(xiě)程序的人往往需要分析所寫(xiě)的SQL語(yǔ)句是否已經(jīng)優(yōu)化過(guò)了,服務(wù)器的響應(yīng)時(shí)間有多快,所以下面這篇文章主要給大家介紹了關(guān)于Mysql中如何查看Sql語(yǔ)句的執(zhí)行時(shí)間的相關(guān)資料,需要的朋友可以參考下
    2021-12-12
  • mysql 直接拷貝data 目錄下文件還原數(shù)據(jù)的實(shí)現(xiàn)

    mysql 直接拷貝data 目錄下文件還原數(shù)據(jù)的實(shí)現(xiàn)

    這篇文章主要介紹了mysql 直接拷貝data 目錄下文件還原數(shù)據(jù)的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-07-07
  • MySQL游標(biāo)詳細(xì)介紹

    MySQL游標(biāo)詳細(xì)介紹

    大家好,本篇文章主要講的是MySQL游標(biāo)詳細(xì)介紹,感興趣的同學(xué)趕快來(lái)看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • CentOS7.3下mysql 8.0.13安裝配置方法圖文教程

    CentOS7.3下mysql 8.0.13安裝配置方法圖文教程

    這篇文章主要為大家詳細(xì)介紹了CentOS7.3下mysql 8.0.13安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-11-11
  • mysql Key_buffer_size參數(shù)的優(yōu)化設(shè)置

    mysql Key_buffer_size參數(shù)的優(yōu)化設(shè)置

    mysql數(shù)據(jù)庫(kù)中有許多重要的參數(shù),其中mysql key_buffer_size是對(duì)MyISAM表性能影響最大的一個(gè)參數(shù),下面就讓我們一起來(lái)了解一下
    2014-12-12
  • mysql8 公用表表達(dá)式CTE的使用方法實(shí)例分析

    mysql8 公用表表達(dá)式CTE的使用方法實(shí)例分析

    這篇文章主要介紹了mysql8 公用表表達(dá)式CTE的使用方法,結(jié)合實(shí)例形式分析了mysql8 公用表表達(dá)式CTE的基本功能、原理使用方法及相關(guān)操作注意事項(xiàng),需要的朋友可以參考下
    2020-02-02
  • MySQL sql_mode的使用詳解

    MySQL sql_mode的使用詳解

    這篇文章主要介紹了MySQL sql_mode的使用詳解,幫助大家更好的理解和學(xué)習(xí)使用MySQL數(shù)據(jù)庫(kù),感興趣的朋友可以了解下
    2021-05-05
  • MySQL的的數(shù)據(jù)一致性保障與延遲問(wèn)題處理

    MySQL的的數(shù)據(jù)一致性保障與延遲問(wèn)題處理

    在分布式數(shù)據(jù)庫(kù)和高并發(fā)應(yīng)用場(chǎng)景下,數(shù)據(jù)一致性 和 數(shù)據(jù)延遲 是兩個(gè)不可忽視的問(wèn)題,MySQL 作為廣泛使用的關(guān)系型數(shù)據(jù)庫(kù),提供了多種機(jī)制來(lái)保障數(shù)據(jù)一致性,本文將深入探討 MySQL 如何保障數(shù)據(jù)一致性 以及 應(yīng)對(duì)數(shù)據(jù)延遲的策略,需要的朋友可以參考下
    2025-03-03
  • wamp中mysql安裝時(shí)能啟動(dòng)重啟后無(wú)法啟動(dòng)的解決辦法

    wamp中mysql安裝時(shí)能啟動(dòng)重啟后無(wú)法啟動(dòng)的解決辦法

    這篇文章主要介紹了wamp中mysql安裝時(shí)能啟動(dòng)重啟后無(wú)法啟動(dòng)的解決辦法 ,需要的朋友可以參考下
    2018-08-08

最新評(píng)論

玛沁县| 肇源县| 库伦旗| 平谷区| 得荣县| 天台县| 延庆县| 修水县| 井陉县| 株洲县| 汉川市| 湘潭市| 长武县| 景宁| 花垣县| 瑞丽市| 伊金霍洛旗| 瑞安市| 同江市| 饶阳县| 贵德县| 扎赉特旗| 阳春市| 平远县| 诏安县| 丹棱县| 武平县| 渭源县| 郧西县| 界首市| 农安县| 阿瓦提县| 囊谦县| 宁津县| 临猗县| 陈巴尔虎旗| 清丰县| 西乌珠穆沁旗| 浦县| 瑞安市| 肇州县|