首页 数据库 mysql教程 Mysq的一些​常见误区

Mysq的一些​常见误区

Jun 20, 2017 pm 03:37 PM
基础

常见误区

    1. count(1)和count(primary_key) 优于 count(*)

    很多人为了统计记录条数,就使用 count(1) 和 count(primary_key) 而不是 count(*) ,他们认为这样性能更好,其实这是一个误区。对于有些场景,这样做可能性能会更差,应为数据库对 count(*) 计数操作做了一些特别的优化。
      1. count(column) 和 count(*) 是一样的

      这个误区甚至在很多的资深工程师或者是 DBA 中都普遍存在,很多人都会认为这是理所当然的。实际上,count(column) 和 count(*) 是一个完全不一样的操作,所代表的意义也完全不一样。
      count(column) 是表示结果集中有多少个column字段不为空的记录
      count(*) 是表示整个结果集有多少条记录
        1. select a,b from … 比 select a,b,c from … 可以让数据库访问更少的数据量

        这个误区主要存在于大量的开发人员中,主要原因是对数据库的存储原理不是太了解。
        实际上,大多数关系型数据库都是按照行(row)的方式存储,而数据存取操作都是以一个固定大小的IO单元(被称作 block 或者 page)为单位,一般为4KB,8KB… 大多数时候,每个IO单元中存储了多行,每行都是存储了该行的所有字段(lob等特殊类型字段除外)。
        所以,我们是取一个字段还是多个字段,实际上数据库在表中需要访问的数据量其实是一样的。
        当然,也有例外情况,那就是我们的这个查询在索引中就可以完成,也就是说当只取 a,b两个字段的时候,不需要回表,而c这个字段不在使用的索引中,需要回表取得其数据。在这样的情况下,二者的IO量会有较大差异。
          1. order by 一定需要排序操作

          我们知道索引数据实际上是有序的,如果我们的需要的数据和某个索引的顺序一致,而且我们的查询又通过这个索引来执行,那么数据库一般会省略排序操作,而直接将数据返回,因为数据库知道数据已经满足我们的排序需求了。
          实际上,利用索引来优化有排序需求的 SQL,是一个非常重要的优化手段
          延伸阅读:MySQL ORDER BY 的实现分析 ,MySQL 中 GROUP BY 基本实现原理 以及 MySQL DISTINCT 的基本实现原理 这3篇文章中有更为深入的分析,尤其是第一篇
            1. 执行计划中有 filesort 就会进行磁盘文件排序

            有这个误区其实并不能怪我们,而是因为 MySQL 开发者在用词方面的问题。filesort 是我们在使用 explain 命令查看一条 SQL 的执行计划的时候可能会看到在 “Extra” 一列显示的信息。
            实际上,只要一条 SQL 语句需要进行排序操作,都会显示“Using filesort”,这并不表示就会有文件排序操作。
            延伸阅读:理解 MySQL Explain 命令输出中的filesort,我在这里有更为详细的介绍
            • 基本原则

              1. 尽量少 join

              MySQL 的优势在于简单,但这在某些方面其实也是其劣势。MySQL 优化器效率高,但是由于其统计信息的量有限,优化器工作过程出现偏差的可能性也就更多。对于复杂的多表 Join,一方面由于其优化器受限,再者在 Join 这方面所下的功夫还不够,所以性能表现离 Oracle 等关系型数据库前辈还是有一定距离。但如果是简单的单表查询,这一差距就会极小甚至在有些场景下要优于这些数据库前辈。
                1. 尽量少排序

                排序操作会消耗较多的 CPU 资源,所以减少排序可以在缓存命中率高等 IO 能力足够的场景下会较大影响 SQL 的响应时间。
                对于MySQL来说,减少排序有多种办法,比如:
                • 上面误区中提到的通过利用索引来排序的方式进行优化

                • 减少参与排序的记录条数

                • 非必要不对数据进行排序

                • 避免使用耗费资源的操作,带有DISTINCT,UNION,MINUS,INTERSECT,ORDER BY的SQL语句会启动SQL引擎 执行,耗费资源的排序(SORT)功能. DISTINCT需要一次排序操作, 而其他的至少需要执行两次排序

                 

                以上是Mysq的一些​常见误区的详细内容。更多信息请关注PHP中文网其他相关文章!

                本站声明
                本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系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.如果您听不到任何人,如何修复音频
                4 周前 By 尊渡假赌尊渡假赌尊渡假赌
                WWE 2K25:如何解锁Myrise中的所有内容
                1 个月前 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)

                PHP基础教程:从入门到精通 PHP基础教程:从入门到精通 Jun 18, 2023 am 09:43 AM

                PHP是一种广泛使用的开源服务器端脚本语言,它可以处理Web开发中所有的任务。PHP在网页开发中的应用广泛,尤其是在动态数据处理上表现优异,因此被众多开发者喜爱和使用。在本篇文章中,我们将一步步地讲解PHP基础知识,帮助初学者从入门到精通。一、基本语法PHP是一种解释性语言,其代码类似于HTML、CSS和JavaScript。每个PHP语句都以分号;结束,注

                学习Go语言变量的基础知识 学习Go语言变量的基础知识 Mar 22, 2024 pm 09:39 PM

                Go语言是一种由Google开发的静态类型、编译型语言,其简洁、高效的特性受到了广泛的开发者关注和喜爱。在学习Go语言的过程中,熟练掌握变量的基础知识是至关重要的一步。本文将通过具体的代码示例来讲解Go语言中变量的定义、赋值、类型推断等基础知识,帮助读者更好地理解和掌握这些知识点。在Go语言中,定义一个变量可以使用关键字var,即var变量名变量类型的格

                Linux可以零基础学习吗?需要学什么? Linux可以零基础学习吗?需要学什么? Feb 19, 2024 pm 12:57 PM

                  想要从事IT行业,但是有不想要学习编程该选择哪门技术合适呢?当然是Linux运维了。Linux是市场上非常受欢迎的技术,应用范围广泛,就业前景好,受到了很多人的喜欢。那么问题来了,Linux运维零基础可以学习吗?  在服务器市场上,Linux系统因为稳定安全、免费开源和高效便捷等优点在市场占有率高达80%,由此可以看得出来Linux应用是非常广泛的。无论是现在还是未来,学习Linux都是非常不错的选择。至于零基础可以学习吗?我的答案是当然可以了。老男孩教育Linux面授班专门针对零基础人员设

                PHP基础入门:如何使用echo函数输出文本内容 PHP基础入门:如何使用echo函数输出文本内容 Jul 30, 2023 pm 05:38 PM

                PHP基础入门:如何使用echo函数输出文本内容在PHP编程中,经常需要向网页上输出一些文本内容,这时就可以使用echo函数。本文将介绍如何使用echo函数输出文本内容,并提供一些示例代码。在开始之前,首先要确保你已经安装了PHP,并且配置了运行环境。如果还没有安装PHP,你可以在PHP官方网站(https://www.php.net)上下载最新的稳定版本。

                C语言函数详解:基础到进阶,全面解析函数的使用 C语言函数详解:基础到进阶,全面解析函数的使用 Feb 18, 2024 pm 02:25 PM

                C语言函数大全:从基础到进阶,详解函数的使用方法,需要具体代码示例简介:C语言是一种广泛使用的编程语言,其强大的功能和灵活性使它成为许多开发人员的首选。在C语言中,函数是一个重要的概念,它能够将一段代码组合成一个独立的模块,提高了代码的重用性和可维护性。本文将从基础开始介绍C语言函数的使用方法,并逐步进阶,帮助读者掌握函数编写的技巧。一、函数的定义与调用在C

                PHP学习笔记:面向对象编程基础 PHP学习笔记:面向对象编程基础 Oct 09, 2023 pm 12:46 PM

                PHP学习笔记:面向对象编程基础,需要具体代码示例导言:面向对象编程(Object-OrientedProgramming,简称OOP)是一种编程的思维方式,通过将问题分解为多个对象并定义对象之间的交互,来解决复杂的编程问题。PHP作为一门功能强大的编程语言,也支持面向对象编程。本文将介绍PHP中面向对象编程的基础概念和常用语法,同时提供具体的代码示例。类

                PHP函数用法:从基础到进阶 PHP函数用法:从基础到进阶 Jun 15, 2023 pm 11:11 PM

                PHP是一种广泛使用的服务器端脚本语言,用于开发动态网站、Web应用程序和其他互联网服务。在开发PHP应用程序过程中,使用函数可以帮助简化代码、提高代码重用性和降低开发成本等。本文将介绍PHP函数的基础用法和进阶用法。一、PHP函数的基础用法1.定义函数在PHP中,使用function关键字来定义函数,例如:functiongreet($name){

                PHP学习笔记:基础语法及变量定义 PHP学习笔记:基础语法及变量定义 Oct 09, 2023 am 08:03 AM

                PHP学习笔记:基础语法及变量定义在如今的互联网时代,PHP(HypertextPreprocessor)作为一种广泛使用的服务器脚本语言,被越来越多的开发者所青睐。本篇文章将为大家介绍PHP的基础语法和变量的定义,并提供具体的代码示例,帮助初学者更好地理解和掌握。一、PHP的基础语法PHP代码的标记在PHP代码中,我们常常使用“<?php”和“?&

                See all articles