日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

mysql只能用一个索引_mysql只会使用到一个索引的原因

發布時間:2025/3/20 数据库 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 mysql只能用一个索引_mysql只会使用到一个索引的原因 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar'

其中column1,column2 ,column3分別單獨建立了3個單索引。

與其說是“數據庫查詢只能用到一個索引”,倒不是說是 和全表掃描/只使用一個索引的速度比起來,去分析兩個索引二叉樹更加耗費時間,所以絕大多數情況下數據庫都是是用一個索引。

如這條語句:

select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar'

我們來想象一下當數據庫有N個索引并且查詢中分別都要用上他們的情況:

查詢優化器(用大白話說就是生成執行計劃的那個東西)需要進行N次主二叉樹查找[這里主二叉樹的意思是最外層的索引節點],此處的查找流程大概如下:

查出第一條column1主二叉樹等于1的值,然后去第二條column2主二叉樹查出foo的值并且當前行的coumn1必須等于1,最后去column主二叉樹查找bar的值并且column1必須等于1和column2必須等于foo。

如果這樣的流程被查詢優化器執行一遍,就算不死也半條命了,查詢優化器可等不及把以上計劃都執行一遍,貪婪算法(最近鄰居算法)可不允許這種情況的發生,所以當遇到以下語句的時候,數據庫只要用到第一個篩選列的索引(column1),就會直接去進行表掃描了。

select count(1) from table1 where column1 = 1 and column2 = 'foo' and column3 = 'bar'

所以與其說是數據庫只支持一條查詢語句只使用一個索引,倒不如說N條獨立索引同時在一條語句使用的消耗比只使用一個索引還要慢。

所以如上條的情況,最佳推薦是使用index(column1,column2,column3) 這種聯合索引,此聯合索引可以把b+tree結構的優勢發揮得淋漓盡致:

一條主二叉樹(column=1),查詢到column=1節點后基于當前節點進行二級二叉樹column2=foo的查詢,在二級二叉樹查詢到column2=foo后,去三級二叉樹column3=bar查找。

總結

以上是生活随笔為你收集整理的mysql只能用一个索引_mysql只会使用到一个索引的原因的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。