首頁 資料庫 mysql教程 MySQL优化器中一个Count和覆盖索引的问题_MySQL

MySQL优化器中一个Count和覆盖索引的问题_MySQL

Jun 01, 2016 pm 01:34 PM
where

bitsCN.com

MySQL优化器中一个Count和覆盖索引的问题

 

MySQL优化器中一个Count和覆盖索引的问题_MySQL

 

现象说明

       其实这里主要要说明的是一个优化器还需要改进的地方。

 

优化器会根据where条件和select_list里面的字段决定在使用一个索引(sta)后,是否需要回表—回到聚集索引取数据。

 

基本的做法是:在确定了一个索引后,将select_list和where中出现的所有字段都拿来判断一下,如果字段都存在于sta索引中,则可以使用覆盖索引。

 

第一个explan可以用上覆盖索引(Using Index), 是因为select_list里面只有count(*),而count(*)在语法解析阶段就被特殊处理,不作为特殊字段。

 

第二个字段在现在的实现中,因为gmt不是sta索引的一部分(sta索引定义上只有sta一个字段,算上聚集索引结构,就是sta,auci)。所以最后判定为不能使用覆盖索引。

 

性能差别

         表中放入500w数据以后,这两个查询的时间相差25倍(0.19s vs  5s)。

 

存在改进

         其实我说这个“不科学”,是因为第二个语句居然不能使用覆盖索引。按照count(gmt)的语义,是计算gmt不为NULL的所有行的数目。但是表定义中,分分明已经说明了gmt为not null。那么就可以转成count(*)了!

     目前因为count、sum、count(distinct)这些操作的处理方法被揉在一起,因此没有特别分开。

 

应用警惕

         好在按照正常的习惯,需要计算总数时,最多是count(auci)或者count(*), 不会故意去count一个别的字段。当时若使用的是MyISAM,就需要小心了。

 

         从上面的分析可以推测得到,如果这是个MyISAM表,还是一样的where条件,count(*)是可以使用覆盖索引的,但是count(auci)就不行了。

 

MySQL优化器中一个Count和覆盖索引的问题_MySQL

bitsCN.com
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
3 週前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

Laravel 集合中的 Where 方法實用指南 Laravel 集合中的 Where 方法實用指南 Mar 10, 2024 pm 04:36 PM

Laravel集合中的Where方法實用指南在Laravel框架的開發過程中,集合(Collection)是一個非常有用的資料結構,它提供了豐富的方法來操作資料。其中,Where方法是常用的篩選方法,能夠根據指定條件來過濾集合中的元素。本文將介紹Laravel集合中Where方法的使用,透過具體的程式碼範例來示範其用法。 1.基本用法Where方法的

Laravel 集合如何使用 Where 方法 Laravel 集合如何使用 Where 方法 Mar 10, 2024 pm 10:21 PM

Laravel集合中如何使用Where方法Laravel是一個流行的PHP框架,它提供了豐富的功能和工具,方便開發者快速建立應用程式。其中,集合(Collection)是Laravel中一個非常實用且強大的資料結構,開發者可以使用集合對資料進行各種操作,例如過濾、映射、排序等。在集合中,Where方法是一個常用的方法,用於根據指定的條件過濾集

從入門到精通:掌握is與where選擇器的使用技巧 從入門到精通:掌握is與where選擇器的使用技巧 Sep 08, 2023 am 09:15 AM

從入門到精通:掌握is與where選擇器的使用技巧引言:在進行資料處理與分析的過程中,選擇器(selector)是一項非常重要的工具。透過選擇器,我們可以按照特定的條件從資料集中提取所需的資料。本文將介紹is和where選擇器的使用技巧,幫助讀者快速掌握這兩個選擇器的強大功能。一、is選擇器的使用is選擇器是一種基本的選擇器,它允許我們根據給定條件對資料集進

mysql left join的基本用法及on與where的差別是什麼 mysql left join的基本用法及on與where的差別是什麼 Jun 02, 2023 pm 11:54 PM

前言我們在寫sql語句的時候,總是無法避免使用到連接關鍵字,例如內連接、外連接。種類是很多的,我在這裡貼上一張在別處找到的圖:這張圖我認為是非常詳細了,它展示出了SQL語句中常見的鏈接類型,以本文中的leftjoin為例,網上是這麼給定義的:LEFTJOIN關鍵字會從左表傳回所有的行,即使在右表中沒有符合的行。其實光從字面意思上來說的話,leftjoin是比較好理解的,但是在使用的過程中,還是會有一些問題的,比如條件在on後面與在where後面,他們的結果是完全不一樣的,接下來我們就從淺到深

Laravel 集合中的 Where 方法用法解析 Laravel 集合中的 Where 方法用法解析 Mar 09, 2024 pm 06:51 PM

Laravel是一款受歡迎的PHP開發框架,它提供了豐富且便利的功能,其中集合(Collection)是Laravel中非常重要的資料結構之一。集合類別提供了許多強大的方法,其中一個常用的方法是where方法。本文將透過具體的程式碼範例來解析Laravel集合中的where方法用法。 1.建立集合首先,我們需要建立一個包含一些資料的集合。可以

Laravel中where方法的常見錯誤及解決方法 Laravel中where方法的常見錯誤及解決方法 Mar 10, 2024 pm 06:03 PM

Laravel中where方法的常見錯誤及解決方法在使用Laravel框架進行開發的過程中,我們經常使用到EloquentORM來操作資料庫。其中,where方法是一個非常常用的方法,用來篩選資料庫中的資料。然而,由於對Laravel框架不夠熟悉或對EloquentORM理解不深,很容易在使用where方法時出現一些常見的錯誤。本文將介紹幾種常見的w

Laravel 集合的 Where 方法詳解 Laravel 集合的 Where 方法詳解 Mar 10, 2024 pm 01:33 PM

Laravel是一款流行的PHP框架,其集合(Collections)類別提供了強大的資料處理功能。其中,Where方法是集合類別中常用的方法之一,用於篩選符合條件的資料。本文將詳細介紹Laravel集合的Where方法,包括使用方法、參數意義以及具體的程式碼範例。一、Where方法概述Where方法用於篩選集合中符合指定條件的元素,並傳回一個

SQL如何使用WHERE子句規定選擇的標準 SQL如何使用WHERE子句規定選擇的標準 Jun 03, 2023 pm 04:31 PM

SQLWHERE子句WHERE子句用來規定選擇的標準。如需有條件地從表格中選取數據,可將WHERE子句新增至SELECT語句。語法如下:SELECT欄位名稱FROM表名稱WHERE列運算子值下面的運算子可在WHERE子句中使用:=:等於:不等於>:大於=:大於等於1965

See all articles