查询优化

王飞活11 天前
数据库·opengauss·索引·回表·查询优化
openGauss 之索引回表在openGauss中如果表有索引信息,查询的谓词条件中又包含索引列,openGauss支持通过索引信息快速拿到需要访问元组的位置信息,然后直接到该位置上取出元组数据,称之为回表查询。如下所示,利用索引索引列id=55快速找到t111上对应元组的位置信息,然后通过位置信息拿到id为55的元组中所有列的数据。
Hello-Brand2 个月前
mysql·索引·性能提升·index·查询优化
数据库系列:巨量数据表的分页性能问题数据库系列:MySQL慢查询分析和性能优化 数据库系列:MySQL索引优化总结(综合版) 数据库系列:高并发下的数据字段变更 数据库系列:覆盖索引和规避回表 数据库系列:数据库高可用及无损扩容 数据库系列:使用高区分度索引列提升性能 数据库系列:前缀索引和索引长度的取舍 数据库系列:MySQL引擎MyISAM和InnoDB的比较 数据库系列:InnoDB下实现高并发控制 数据库系列:事务的4种隔离级别 数据库系列:RR和RC下,快照读的区别 数据库系列:MySQL InnoDB锁机制介绍 数据库系列:My
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(十四)使用用户自定义变量的一个特性是你可以在给一个变量赋值的同时使用这个变量,换句话说,用户自定义变量的赋值具有"左值"特性。下面的例子展示了如何使用变量来实现一个类似"行号(row number)"的功能:
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(十二)这个话题基本上一直在讨论,这里需要特别提到的是:关于子查询优化给出的最重要的优化建议就是尽可能使用关联查询,至少当前的MySQL版本需要这样,"尽可能使用关联"并不是绝对的,如果使用的是MySQL5.6或更新的版本或者MariaDB,那么久可以直接忽略关于子查询的这些建议了
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(三)在优化有问题的查询时,目标应该是找到一个更优的方法获得实际需要的记过——而不是一定总是需要从MySQL获取一模一样的结果集。有时候,可以将查询转换一种写法让其返回一样的结果,但是性能更好。但也可以通过修改应用代码,用另一种方式完成查询,最终达到一样的目的。
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(十三)在系统中需要进行分页操作的时候,我们通常会使用LIMIT加上偏移量的办法实现,同时加上合适的ORDER BY子句。如果有对应的索引,通常效率会不错,否则,MySQL需要做大量的文件排序操作。一个非常常见又令人头疼的问题就是,在偏移量非常大的时候(翻页到非常靠后的页面),例如可能是 LIMIT 10 000,20这样的查询,这时MySQL需要查询10020条记录然后只返回最后20条,前面的10 000条记录都将被抛弃,这样的代价非常高。如果所有的页面被访问的频率都相同,内马尔这样的查询平均访问半个表的数据。
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(五)MySQL的查询优化器是一个非常复杂的部件,它使用了很多优化策略来生成一个最优的执行计划。优化策略可以简单地分为两种,一种是静态优化,一种是动态优化。静态优化可以直接对解析树进行分析,并完成优化。例如,优化器可以通过一些简单的代数变换将WHERE条件转换成另一种等价形式。静态优化不依赖于特别的数值,如WHERE条件中带入的一些常数等。静态优化在第一次完成后就一直有效,即使使用不同的参数重复执行查询也不会发生变化。可以认为这是一种"编译优化"。 相反,动态优化则和查询的上下文有关,也可能和很多其他因素有关,
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(十)由于历史原因,MySQL并不支持松散索引扫描,也就无法按照不连续的方式扫描一个索引。通常,MySQL的索引扫描需要先定义一个起点和终点,即使需要的数据只是这段索引中很少数的几个,MySQL仍需要扫描这段儿索引中的每一个条目。下面我们通过一个示例说明这点。假设我们有如下索引(a,b),有下面的查询:
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(九)有时,MySQL无法将限制条件从外层"下推"到内层,这使得原本能够限制部分返回结果的条件无法应用到内层查询的优化上。如果希望UNION的各个子句能够根据LIMIT只取部分结果集,或者希望能够先排好序再合并结果集的话,就需要在UNION的各个子句中分别使用这些子句。例如,想将两个子查询结果联合起来,然后再取前20条记录,那么MySQL会将两个表都存放到同一个临时表中,然后再取出前20行记录:
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(八)MySQL的万能"嵌套循环"并不是对每种查询都是最优的。不过还好,MySQL查询优化器只对少部分查询不适用,而且我们往往可以通过改写查询让MySQL高效地完成工作。还有一个好消息,MySQL5.6版本正式发布后,会消除很多MySQL原本的限制,让更多的查询能够以尽可能高的效率完成。
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(六)因为这里使用了film_id字段进行等值关联,MySQL知道这里的WHERE子句不仅适用于film表,而且对于film_actor表同样适用。如果适用的是其他的数据库管理系统,可能还需要手动通过一些条件来告知优化器这个WHERE条件适用于两个表,那么写法就会如下:
coffee_babe3 个月前
java·数据库·mysql·性能优化·查询优化
MySQL之查询性能优化(二)查询性能低下最基本的原因是访问的数据太多。某些查询可能不可避免地需要筛选大量数据,但这并不场景。大部分性能低下的查询都可以通过减少访问的数据量的方式进行优化。对于低效的查询,我们发现通过下面两个步骤来分析总是很有效:
华为云开发者联盟4 个月前
sql语句·华为云开发者联盟·查询优化
浅析MySQL 8.0直方图原理本文分享自华为云社区《【MySQL技术专栏】MySQL8.0直方图介绍》,作者:GaussDB 数据库。