MySQL优化器中一个Count和覆盖索引的问题_MySQL
bitsCN.com
MySQL优化器中一个Count和覆盖索引的问题
现象说明
其实这里主要要说明的是一个优化器还需要改进的地方。
优化器会根据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)就不行了。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









Laravel 컬렉션의 Where 메소드에 대한 실용 가이드 Laravel 프레임워크를 개발하는 동안 컬렉션은 데이터를 조작하기 위한 풍부한 메소드를 제공하는 매우 유용한 데이터 구조입니다. 그 중 Where 방식은 특정 조건에 따라 컬렉션의 요소를 필터링할 수 있는 일반적으로 사용되는 필터링 방식이다. 이 글에서는 Laravel 컬렉션에서 Where 메소드의 사용법을 소개하고 특정 코드 예제를 통해 사용법을 보여줍니다. 1. Where 메소드의 기본 사용법

Laravel 컬렉션에서 Where 메소드를 사용하는 방법 Laravel은 개발자가 애플리케이션을 신속하게 구축할 수 있도록 다양한 기능과 도구를 제공하는 인기 있는 PHP 프레임워크입니다. 그 중 컬렉션은 Laravel의 매우 실용적이고 강력한 데이터 구조입니다. 개발자는 컬렉션을 사용하여 필터링, 매핑, 정렬 등과 같은 데이터에 대한 다양한 작업을 수행할 수 있습니다. 컬렉션에서 Where 메서드는 지정된 조건에 따라 컬렉션을 필터링하는 데 일반적으로 사용되는 메서드입니다.

초보자부터 숙련자까지: 선택기 사용 기술과 위치를 마스터하세요. 소개: 데이터 처리 및 분석 과정에서 선택기는 매우 중요한 도구입니다. 선택기를 통해 특정 조건에 따라 데이터 세트에서 필요한 데이터를 추출할 수 있습니다. 이 기사에서는 독자가 이 두 선택기의 강력한 기능을 빠르게 익힐 수 있도록 is 및 where 선택기의 사용 기술을 소개합니다. 1. is 선택기의 사용 is 선택기는 주어진 조건에 따라 데이터 세트를 선택할 수 있는 기본 선택기입니다.

서문 SQL 문을 작성할 때 내부 연결, 외부 연결과 같은 연결 키워드를 사용하지 않을 수 없습니다. 다양한 유형이 있습니다. 다른 곳에서 찾은 사진을 여기에 게시하겠습니다. 이 사진은 SQL 문의 일반적인 링크 유형을 보여줍니다. 이 기사의 예를 들어 보면 다음과 같습니다. LEFTJOIN 키워드는 오른쪽 테이블에 일치하는 행이 없더라도 왼쪽 테이블의 모든 행을 반환합니다. 실제로 leftjoin은 문자 그대로 이해하기 쉽지만 사용 중에 여전히 몇 가지 문제가 있습니다. 예를 들어 조건이 where 이후인 경우 결과가 얕은 것에서 깊은 것으로 가보겠습니다.

Laravel은 풍부하고 편리한 기능을 제공하는 인기 있는 PHP 개발 프레임워크입니다. 컬렉션은 Laravel에서 매우 중요한 데이터 구조 중 하나입니다. 컬렉션 클래스는 많은 강력한 메서드를 제공하며 그 중 하나가 where 메서드입니다. 이 문서에서는 특정 코드 예제를 사용하여 Laravel 컬렉션에서 where 메소드의 사용법을 분석합니다. 1. 컬렉션 생성 먼저 일부 데이터가 포함된 컬렉션을 생성해야 합니다. 할 수 있다

Laravel은 널리 사용되는 PHP 프레임워크이며 해당 Collections 클래스는 강력한 데이터 처리 기능을 제공합니다. 그중 Where 메서드는 컬렉션 클래스에서 일반적으로 사용되는 메서드 중 하나로 조건에 맞는 데이터를 필터링하는 데 사용됩니다. 이번 글에서는 라라벨 컬렉션의 Where 메소드에 대해 사용법, 매개변수 의미, 구체적인 코드 예시 등을 자세하게 소개하겠습니다. 1. Where 메소드 개요 Where 메소드는 컬렉션에서 지정된 조건을 만족하는 요소를 필터링하고 결과를 반환하는 데 사용됩니다.

SQLWHERE 절 WHERE 절은 선택 기준을 지정하는 데 사용됩니다. 테이블에서 조건부로 데이터를 선택하려면 SELECT 문에 WHERE 절을 추가하세요. 구문은 다음과 같습니다. SELECT 열 이름 FROM 테이블 이름 WHERE 열 연산자 값 WHERE 절에서 다음 연산자를 사용할 수 있습니다. =: 같음: 같지 않음 >: 보다 큼 =: 1965 이상

Laravel의 where 메소드에 대한 일반적인 오류 및 해결 방법 Laravel 프레임워크를 사용하여 개발하는 과정에서 데이터베이스를 운영하기 위해 EloquentORM을 사용하는 경우가 많습니다. 그 중 where 메소드는 데이터베이스의 데이터를 필터링하는 데 매우 일반적으로 사용되는 메소드입니다. 그러나 Laravel 프레임워크에 대한 익숙함이 부족하거나 EloquentORM에 대한 깊은 이해가 부족하여 where 메소드를 사용할 때 몇 가지 일반적인 실수를 저지르기 쉽습니다. 이 기사에서는 몇 가지 일반적인 W를 소개합니다.
