首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

必看的数据库使用规范

关于强制列的名称必须控制32个字符以内,名只能使用字母、数字下划线,一律小写。 【强制名要求模块名强相关,同一模块使用名尽量使用统一前缀。...【强制】where条件里等号左右字段类型必须一致,否则无法利用索引。 【强制】WHERE 子句中禁止只使用全模糊的LIKE条件进行查找,必须有其他等值或范围查询条件,否则无法利用索引。...【建议】减少使用order by,业务沟通能不排序就不排序,或将排序放到程序端去做。Order by、group by、distinct这些语句较为耗费CPU,数据库的CPU资源是极其宝贵的。...【建议】order by、group by、distinct这些SQL尽量利用索引直接检索出排序好的数据。如where a=1 order by b可以利用key(a,b)。...【建议】包含了order by、group by、distinct这些查询的语句,where条件过滤出来的结果集请保持1000行以内,否则SQL会很慢。

86350
您找到你想要的搜索结果了吗?
是的
没有找到

SQL优化最干货总结 – MySQL(2020最新版)

order by 中的字段出现在where条件中时,才会利用索引而不再二次排序,更准确的说,order by 中的字段执行计划中利用了索引时,不用排序操作。...优化group by语句 默认情况下,MySQL 会对GROUP BY分组的所有值进行排序,如 “GROUP BY col1,col2,….;” 查询的方法如同在查询中指定 “ORDER BY col1...因此,如果查询包括 GROUP BY 但你并不想对分组的值进行排序,你可以指定 ORDER BY NULL禁止排序。...因此,该写法每次翻页消耗的资源时间都基本相同,就像翻第一页一样。 适用场景:当查询排序字段(即where子句order by子句涉及的字段)有对应覆盖索引时,且中间结果集很大的情况时适用。...五、建优化 1. 中建立索引,优先考虑where、order by使用到的字段。 2.

72310

2020最新最全面的SQL优化干货总结

order by 中的字段出现在 where 条件中时,才会利用索引而不再二次排序,更准确的说,order by 中的字段执行计划中利用了索引时,不用排序操作。...查询条件优化 ---- ①对于复杂的查询,可以使用中间临时暂存数据 ②优化 group by 语句 默认情况下,MySQL 会对 GROUP BY 分组的所有值进行排序,如 “GROUP BY col1...因此,如果查询包括 GROUP BY 但你并不想对分组的值进行排序,你可以指定 ORDER BY NULL 禁止排序。...适用场景:当查询排序字段(即 where 子句 order by 子句涉及的字段)有对应覆盖索引时,且中间结果集很大的情况时适用。...建优化 ---- ①中建立索引,优先考虑 where、order by 使用到的字段。

57600

MySQL优化特定类型的查询(书摘备查)

确保group by或order by只引用了一个中的列,这样,mysql可以尝试对这些操作使用索引。 . 要谨慎地升级mysql。...通常来说,索引也是优化它们的最重要手段。 当不能使用索引时,mysql有两种优化group by的策略:使用临时或文件排序进行分组。任何一种方式对于特定的查询都有可能是高效的。...可以使用sql_small_result强制mysql选择临时,或者使用sql_big_result强制使用文件排序。...优化limitoffset 分页系统中使用limitoffset是很常见的,它们通常会order by一起使用索引对于排序较有帮助,如果没有索引就需要大量文件排序。...50 and 54 order by position; 类似的问题还有对数据进行排名,但它往往group by混在一起,基本可以肯定的是需要预先计算存储排名。

1.4K30

数据库面试题【十八、优化关联查询&优化子查询&优化LIMIT分页&优化UNION查询&优化WHERE子句】

优化关联查询: 确定ON或者USING子句中是否有索引确保GROUP BYORDER BY只有一个中的列,这样MySQL才有可能使用索引。...优化子查询: 用关联查询替代 优化GROUP BYDISTINCT 这两种查询据可以使用索引来优化,是最有效的优化方法 关联查询中,使用标识列分组的效率更高 如果不需要ORDER BY,进行GROUP...BY时加ORDER BY NULL,MySQL不会再进行文件排序。...1.对查询进行优化,应尽量避免全扫描,首先应考虑 where 及 order by 涉及的列上建立索引。...如下面语句将进行扫描: select id from t where num=@num -- 可以改为强制查询使用索引: select id from t with(index(索引名)) where

1.4K40

MySQL性能优化点记录

通常只需要在联接中的第2个上添加索引就可以。 2.确保group by或order by只引用一个中的列。这样可以使用索引。...3.谨慎升级mysql (五)优化子查询 对于子查询,尽可能的使用联接。 (五)优化group bydistinct 1.主要方式:索引 2.优化group by的策略:临时或文件排序分组。...SQL_SMALL_RESULT : 强制使用临时 SQL_BIG_RESULT :强制使用文件排序 通常对表的id进行分组会更加高效 可以使用SQL_MODE参数禁止SELECT中使用group...注意: Rollup 与 order by 相互排拆 (六)优化limitoffset LIMIT ORDER BY 一块使用。 如果没有索引,就使用文件排序。...select语句中 9.USE INDEX IGNORE INDEX FORCE INDEX 控制索引使用mysql5.1中,还有 FOR ORDER BY FOR GROUP BY

1K20

【MySQL高级】SQL优化

where 条件Order by 使用相同的索引,并且Order By 的顺序索引顺序相同, 并且Order by 的字段都是升序,或者都是降序。...首先根据条件取出排序字段行指针信息,然后排序区 sort buffer 中排序,如果sort buffer不够,则在临时 temporary table 中存储排序结果。...5.4 优化group by 语句 由于GROUP BY 实际上也同样会进行排序操作,而且与ORDER BY 相比,GROUP BY 主要只是多了排序之后的分组操作。...当然,如果在分组的时候还使用了其他的一些聚合函数,那么还需要一些聚合函数的计算。所以,GROUP BY 的实现过程中,与 ORDER BY 一样也可以利用到索引。...如果查询包含 group by 但是用户想要避免排序结果的消耗, 则可以执行order by null 禁止排序

58032

MySQL 8 新特性详解

GROUP BY操作的改变 MySQL 8之前,当你执行一个包含GROUP BY子句的查询时,MySQL会隐式地对结果进行排序。然而,这种行为并不总是符合用户的期望,而且可能会导致不必要的性能开销。...为了解决这个问题,MySQL 8更改了GROUP BY的行为,使其不再隐式地对结果进行排序。如果你需要排序结果,你必须显式地使用ORDER BY子句。...MySQL 8之前,以下查询会隐式地对结果进行排序: SELECT column1, COUNT(*) FROM mytable GROUP BY column1; MySQL 8中,如果你需要排序结果...索引中的函数表达式 之前的MySQL版本中,索引只能基于列的原始值创建。然而,某些情况下,你可能希望对列的值进行某种转换或计算后再创建索引。...MySQL 8现在支持索引使用函数表达式,这意味着你可以创建索引时应用函数来转换或计算列的值。这使得你可以根据特定的需求创建更加灵活高效的索引

11210

Oracle sql 性能优化(一)

减少访问数据库的次数,就能实际上减少 ORACLE 的工作量 \ 2.2【推荐】避免大关联,大关联可能存在性能问题 \ 2.4【强制】禁止使用“SELECT *”这样的语句,特别是程序代码内部 说明...\ 2.6【推荐】尽量使用 UNION ALL 代替 UNION 说明: UNION 进行表链接后会筛选掉重复的记录,所以表链接后会对所产生的结果集进 行排序运算,删除重复的记录再返回结果,如果数据量大的话可能会导致用磁盘进...\ 2.7【强制】禁止 SQL 内层使用 ORDER BY GROUP BY 排序操作 说明: Note:查询分页场景下例外 \ 2.8【推荐】尽量减少外层使用 ORDER BY GROUP BY...排序操作 说明: 大量的排序操作影响系统性能,如必须使用排序操作,尽量建立在有索引的列上。...BY PROD_ID \ 2.9 索引使用 2.9.1【强制】不允许对索引进行计算 举例: Demo Avoided SELECT ......

85730

MySQL索引(四)常见的索引优化手段

既然通过试验证明,强制索引要慢于全扫描,那么项目中用到了索引第一个字段使用范围查找的情况该如何优化呢?...尽量索引列上完成排序,并满足最左前缀原则。 如果 order by 的条件不在索引列上,将会使用 filesort 进行排序。...group by order by 类似,本文就没有给出 GROUP BY 的实例,GROUP BY 实际上是排序之后再进行分组,也要遵循索引的最左前缀法则。...但在使用 ORDER BY 排序 GROUP BY 时,是无法使用前缀索引的。...解决 where order by 冲突时优先考虑 where:当 where 条件 order by 同时存在索引设计冲突时,优先考虑让 where 条件使用索引进行快速筛选,再进行排序

6410

高性能MySQL学习笔记

一个多列的B-Tree索引中,索引列的顺序意味着索引首先按照从左到右进行排序,所以索引可以按照升序或者降序进行扫描,以满足精确符合列顺序的ORDER BY、GROUP BYDISTINCT等子句的查询需求...,如果还不够,就需要考虑修改应用的架构,可以增加汇总表,或者增加外部缓存系统 优化关联查询 确保on或者using字句中的列上有索引 确保任何的group byorder by中的表达式只设计到一个中的列...中,当无法使用索引的时候,group by使用两种策略来完成:使用临时或者文件排序来左分组 如果需要对关联查询左分组,并且是按照查找中的某个列进行分组,那么通常采用查找的标识列分组的效率会比其他列更好...除非确实需要服务器消除重复的行,否则就一定要使用union all,如果没有all关键字,mysql会给临时加上distinct选项,这回导致对整个临时的数据做唯一性检查 使用用户自定义变量 以下场景不能使用用户自定义变量...使用自定义变量的查询,无法使用查询缓存 不能在使用常量或者标识符的地方使用自定义变量用户自定义变量的生命周期是一个连接中游戏哦啊,所以不能用他们来左连接中的通信 如果使用连接池或者使用持久化连接

1.3K20

SQL优化指南

2.第二种是对返回的数据进行排序,也就是通常看到的Using filesort,filesort是通过相应的排序算法,将数据放在sort_buffer_size系统变量设置的内存排序区中进行排序,如果内存装载不下...filesort的优化   了解了MySQL排序的方式,优化目标就清晰了:尽量减少额外的排序,通过索引直接返回有序数据。where条件order by使用相同的索引。   ...事实上,MySQL在所有的group by 后面隐式的加了order by ,也就是说group by语句的结果会默认进行排序。   ...如果所有页面的访问频率都相同,那么这样的查询平均需要访问半个的数据。 第一种思路 索引上分页   索引上完成分页操作,最后根据主键关联回原查询所需要的其他列的内容。...改变执行计划 提高索引优先级 use index 可以让MySQL去参考指定的索引,但是无法强制MySQL去使用这个索引,当MySQL觉得这个索引效率太差,它宁愿去走全扫描。。。

78120

SQL优化指南

第二种是对返回的数据进行排序,也就是通常看到的Using filesort,filesort是通过相应的排序算法,将数据放在sort_buffer_size系统变量设置的内存排序区中进行排序,如果内存装载不下...filesort的优化 了解了MySQL排序的方式,优化目标就清晰了:尽量减少额外的排序,通过索引直接返回有序数据。where条件order by使用相同的索引。...事实上,MySQL在所有的group by 后面隐式的加了order by ,也就是说group by语句的结果会默认进行排序。...如果所有页面的访问频率都相同,那么这样的查询平均需要访问半个的数据。 第一种思路 索引上分页 索引上完成分页操作,最后根据主键关联回原查询所需要的其他列的内容。...八、改变执行计划 提高索引优先级 use index 可以让MySQL去参考指定的索引,但是无法强制MySQL去使用这个索引,当MySQL觉得这个索引效率太差,它宁愿去走全扫描。。。

82020

数据库查询优化的一般步骤_sql创建数据库失败

这时就可以采用 forceindex 来强制优化器使用我们制定的索引。 5、日期时间类型 对于非标准的日期字段,例如字符串的日期字段,进行分区裁剪查询时会导致无法识辨,依旧走全扫描。...8、where 子句 避免 where 子句中对字段进行 null 值判断:对于 null 的判断会导致引擎放弃使用索引进行扫描。...13、order by/group by 另外 order by/group by 的 SQL 涉及排序,尽量索引中包含排序字段,并让排序字段的排序顺序与索引列中的顺序相同,这样可以避免排序或减少排序次数...14、禁止使用 order by rand() order by rand() 会为增加几个伪列,然后用 rand() 函数为每一行数据计算 rand() 值,最后基于该行排序,这通常都会生成磁盘上的临时...,必要时通过 rollback 显示回滚 尽量少使用 distinct、order by、group by、union 等 SQL,排序需求可以放到前端(分页的就不方便交给前端排序)。

1.2K20

MYSQL 优化

如果是使用强制索引使用index dive则也不能获取任何其它的信息。 非唯一索引,也不是全文索引。 没有子查询。 未使用DISTINCT, GROUP BY, 或者 ORDER BY。...区别并计算法:排序并集算法返回行前必须首先获取IDs,排序。 Engine Condition Pushdown 优化 这一优化提升了非索引常量条件查询。这种情况下,查询将会在引擎层面执行。...即使 ORDER BY 所使用的列索引不完全匹配,只要未使用索引部分额外的条件列是常量,也会使用索引排序。如果索引未包含查询中所有的列,MySQL只有使用索引代价更小的时候使用索引。...ORDER BY GROUP BY 使用不同的表达式。 部分索引不能替代文件排序索引排序,如对MEMORY引擎的HASH 索引。...ORDER BY NULL 会避免对结果进行排序,而不是处理GROUP BY的排序。 Note GROUP BY 使用默认排序。如果需要确定的排序,则使用ORDER BY条件。

2.5K40

MySQL查询优化

触发器是一个修改了指定中的数据时执行的存储过程。 通常通过创建触发器来强制实现不同中的逻辑相关数据的引用完整性一致性。...这通常比使用很多INSERT语句块快20倍 ORDER BY优化 InnoDB引擎下,通过有序排序索引顺序扫描,这种方式使用explain分析查询的时候显示为Using Index,无需额外排序,操作效率较高...: 索引的列顺序Order By子句的顺序完全一致 索引中所有列的方向(升序,降序)Order by子句完全一致 Order by中的字段全部关联中的第一张中 explain select customer_id...select * from customer order by store_id; Filesort是通过相应排序算法,将取得的数据sort_buffer_size系统变量设置的内存排序进行排序。...by使用相同的索引,并且order by的顺序索引顺序相同,并且order by的字段都是升序或者都是降序。

1.5K20

MySQL查询优化

触发器是一个修改了指定中的数据时执行的存储过程。 通常通过创建触发器来强制实现不同中的逻辑相关数据的引用完整性一致性。...这通常比使用很多INSERT语句块快20倍 ORDER BY优化 InnoDB引擎下,通过有序排序索引顺序扫描,这种方式使用explain分析查询的时候显示为Using Index,无需额外排序,操作效率较高...: 索引的列顺序Order By子句的顺序完全一致 索引中所有列的方向(升序,降序)Order by子句完全一致 Order by中的字段全部关联中的第一张中 explain select customer_id...select * from customer order by store_id; Filesort是通过相应排序算法,将取得的数据sort_buffer_size系统变量设置的内存排序进行排序。...by使用相同的索引,并且order by的顺序索引顺序相同,并且order by的字段都是升序或者都是降序。

1.5K10

MySQL数据库设计规范

2.1.2 结构 【强制列的名称必须控制32个字符以内,名只能使用字母、数字下划线,一律小写。...【强制】写入事务发往主库,只读SQL发往从库。 【强制】除静态或小(100行以内),DML语句必须有where条件,且使用索引查找。...【建议】对于MySQL主从延迟严格敏感的select语句,请开启事务强制访问主库。 2.2.4 排序分组 【建议】减少使用order by,业务沟通能不排序就不排序,或将排序放到程序端去做。...【建议】order by、group by、distinct这些SQL尽量利用索引直接检索出排序好的数据。如where a=1 order by可以利用key(a,b)。...【建议】包含了order by、group by、distinct这些查询的语句,where条件过滤出来的结果集请保持1000行以内,否则SQL会很慢。

2.2K40
领券