小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法

max()的优化

例如:explain select max(`payment_date`)  from payment; 可以查看到row的行数非常的多,也就是说扫描了整张表。

为payment_date加上一个索引。

create index idx_payment on payment (`payment_date`);

执行sql语句    explain select max(`payment_date`) from payment order by payment_date; 可以看到rows为null。

extra:    select tables optinized away;

并没有扫描整个表,只是通过索引拿出。

索引是通过顺序排列的,所以,通过索引的统计信息就非常清楚的知道,最后一个payment_date的数值是什么样子的。因此并不需要对表的操作,这样就大大的增加了这条sql的执行效率,同时尽可能大的减少了IO操作,这样的话,不管数据量有多大,执行效率基本上是恒定的。

思路:对于max()的查询,可以通过索引的方式来优化它。

count(*)和count(num)的区别

如果num某行为null,count(num)是不包含在内的。而count(*)这是会包含在内的。这就是为什么有时会出现差异的原因。

例如:

id            num

1                1

2                2

3                null

count(*)=3  但是 count(id)=2

子查询的优化

子查询用连接方式查询时要注意是否是1对多的关系,如果是,数据结果就会出现重复,需要用distinct去重。

limit()优化

优化步骤1:使用有索引的列或者主键的列进行order by操作。道理和max()一样。

优化步骤2:记录上次返回的主键,在下次查询时使用主键过滤。

例如:select file_id,description from file where file_id >55 and file_id <= 60 order by film_id limit 1,5;

这种做法的缺点是万一主键缺失的情况下,拿出来的就不一定是5条了。

d=====( ̄▽ ̄*)b 中心优化思想:避免数据量大时扫描过多的记录。

时间: 2024-09-30 21:11:05

小蚂蚁学习mysql性能优化(4)--SQL以及索引优化--具体一些优化方法的相关文章

小蚂蚁学习mysql性能优化(完结)--硬件方面优化--CPU和DISK优化

数据库硬件方面优化 如何选择CPU? 是选择单核更快的CPU还是选择核数更多CPU? mysql有一些工作只能使用单核CPU mysql对CPU核数的支持并不是越多越快 建议:mysql5.5使用的服务器不要超过32核.还是建议单核频率更快的cpu. Disk IO优化 常用RAID级别简介 RAID0:也成为条带,就是把多个磁盘链接成一个硬盘使用,这个级别IO最好. RAID1:也成为镜像,要求至少有两个磁盘,每组磁盘存储的数据相同. RAID0+1:就是RAID1和RAID0的结合.同时具备

小蚂蚁学习mysql性能优化(7)--数据库结构优化--选择合适的数据类型

关于SQL以及索引优化的部分终于学习完了,今天开始进入第二层次的学习,数据库的结构优化,第一部分,选择合适的数据类型. 数据类型的选择,重点在于合适二字. 1.    使用可以存下数据的最小的数据类型 比如,一个时间类型的一个数据,可以使用varchar,可以使用datetime,还可以使用int,如何选择,就看哪一种类型对我们来说是最小的,不言而喻,int类型相对来说是最小的数据类型. 2.    使用简单的数据类型. int类型要比varchar类型在mysql处理上简单的多,用int类型来

小蚂蚁学习mysql性能优化(1)--SQL以及索引优化

性能优化之mysql优化 可以从几个方面进行优化 硬件    系统配置    数据库表结构    SQL索引 成本从高到底,效果从低到高. 如何发现有问题的SQL? 使用mysql慢查询日志对有效率问题的sql进行监控. show variables like 'slow_query.log'; set global slow_query_log_file='/home/mysql/sql_log/mysql-slow.log';//日志存放的位置 set global log_queries_

小蚂蚁学习mysql性能优化(3)--SQL以及索引优化--慢查日志分析工具和explain说明

昨天在测试操作数据库的时候碰到两个问题忘了记录下来,今天补充上去,接上篇 1. 安装测试数据库sakila时报错.Mysql server has gone away的问题.解决方法: 查看    show global variables like 'max_allowed_packet'; 一般来说会显示    max_allowed_packet    1048576 修改为    set global max_allowed_packet    =    1024*1024*16;   

MySQL 性能调优——SQL 查询优化

如何设计最优的数据库表结构,如何建立最好的索引,以及如何扩展数据库的查询,这些对于高性能来说都是必不可少的.但是只有这些还不够,要获得良好的数据库性能,我们还要设计合理的数据库查询,如果查询设计的很糟糕,即使增加再多的只读从库,表结构设计的再合理,索引再合适,只要查询不能使用到这些东西,也无法实现高性能的查询.所以说查询优化,索引优化,库表结构优化需要齐头并进. 在进行库表结构设计时,我们要考虑到以后的查询要如何的使用这些表,同样,编写 SQL 语句的时候也要考虑到如何使用到目前已经存在的索引,

SQL Server2005索引碎片分析和解决方法

SQL Server2005索引碎片分析和解决方法 本文作者(郑贤娴),请您在阅读本文时尊重作者版权. 摘要: SQL Server,为了反应数据的更新,需要维护表上的索引,因而这些索引会形成碎片.根据工作量的特征,这些碎片会影响对应的工作性能.此文帮助决定是否需要整理碎片以改善性能的信息.SQL Serve提供一些命令来实现索引的碎片整理.这里比较其中两个命令:DBCC DBREINDEX 和 DBCC INDEXDEFRAG. 关键词: SQL Server;索引碎片;数据库优化毫无疑问,给

SQL优化工具 - SQL Server Profiler与数据库引擎优化顾问

最近项目做到几千个学生分别去人脸识别记录(目前约630000行)中查询最后一次记录,可想而知性能这块是个麻烦.于是乎,GET到了SQL Server Profiler和数据库引擎优化顾问这俩工SHEN具QI. 开始装逼... 首先来一条执行效率不怎么样的SQL语句 将SQL Server Profiler中的跟踪文件保存至本地 打开数据库优化引擎,选择工作负荷文件以及需要优化的数据库/表,点击开始分析 分析结束后会给你索引建议,执行操作→应用建议,将会自动生成SQL语句并执行,完成后再执行试试那

小蚂蚁学习PHP性能优化(1)

因为sphinx还没有找到比较合适的材料,今天开始学习一下PHP性能优化.记得很久之前做过这么一个功能,就是计算一级人脉下的所有推荐人的资金和,以及每个推荐人的推荐人的资金和,就形成了一个人脉树,当时的做法就是用了递归的方法来计算,其中不停的查询数据库,资源消耗相当的大,当一个人下面的直接推荐人和间接推荐人达到一二百个的时候,那就无法运行下去,这确实让人头疼了很久.今天开始学习一下高手讲解的PHP就很有必要. PHP的性能问题的解决方法 PHP语言级的性能优化 PHP周边问题的性能优化 PHP语

小蚂蚁学习PHP性能优化(2)--PHP语言级性能优化

接上篇 3.    优化点:尽可能少的使用魔法函数 情况描述:PHP提供的魔法函数,性能不佳 为什么呢?为了给PHP程序员省事,PHP语言为此做了很多 好的方法:尽可能规避使用PHP魔法函数,需要使用的时候,权衡一下利弊 4.    优化点:产生额外开销的错误抑制符@ 情况描述:PHP提供的错误抑制符只是为了方便"懒人" @符号的实际逻辑:在代码开始前,结束后,增加了opcode,忽略了报错. 好的建议:建议尽量不要使用@错误抑制符 5.    优化点:合理使用内存 情况描述:PHP有