随笔分类 -  SQL

摘要:内部临时表的类型和产生时机相关,翻译自:http://dev.mysql.com/doc/refman/5.6/en/internal temporary tables.html In some cases, the server creates internal temporary tables 阅读全文
posted @ 2018-06-12 11:49 星朝 阅读(1055) 评论(0) 推荐(0)
摘要:SQL总结(五)存储过程 概念 存储过程(Stored Procedure):已预编译为一个可执行过程的一个或多个SQL语句。  创建存储过程语法 CREATE proc | procedure procedure_name [{@参数数据类型} [=默认值] [output], {@参数 阅读全文
posted @ 2018-06-11 18:09 星朝 阅读(259) 评论(0) 推荐(0)
摘要:上一篇文章《万字总结:学习MySQL优化原理,这一篇就够了!》文末给大家留有两个开放的问题:   有非常多的程序员在分享时都会抛出这样一个观点:尽可能不要使用存储过程,存储过程非常不容易维护,也会增加使用成本,应该把业务逻辑放到客户端。既然客户端都能干这些事,那为什么还要存储过程? JOI 阅读全文
posted @ 2018-06-11 17:35 星朝 阅读(469) 评论(0) 推荐(0)
摘要:一、一个例子 数据库需要处理的行数: 189444 1877 13482~~~479亿 如果在关联字段上加上合适的索引: 数据库需要处理的行数:368006 1 3 1~~~110万 MySQL通常是一个请求对应一个线程,其thread_handling是one thread per connect 阅读全文
posted @ 2018-06-11 16:36 星朝 阅读(1574) 评论(0) 推荐(0)
摘要:SQL优化的思路:  1.优化更需要优化的sql;  2.定位优化对象的性能瓶颈:优化前需了解查询的瓶颈是IO还是CPU,可通过PROFILING很容易定位查询的瓶颈。  3.明确优化目标;  4.从Explain入手;  5.多使用profile; 阅读全文
posted @ 2018-06-11 16:35 星朝 阅读(4329) 评论(0) 推荐(0)
摘要:说起MySQL的查询优化,相信大家收藏了一堆奇淫技巧:不能使用SELECT 、不使用NULL字段、合理创建索引、为字段选择合适的数据类型….. 你是否真的理解这些优化技巧?是否理解其背后的工作原理?在实际场景下性能真有提升吗?我想未必。因而理解这些优化建议背后的原理就尤为重要,希望本文能让你重新审视 阅读全文
posted @ 2018-06-11 16:26 星朝 阅读(340) 评论(0) 推荐(1)
摘要:一、用SQL自连接查询处理列之间的关系 SQL自身连接,可以解决很多问题。下面举的一个例子,就是使用了SQL自身连接,它解决了列与列之间的逻辑关系问题,准确的讲是列与列之间的层次关系。SQL代码如下: 1 SELECT FIRST.CNumber, SECOND.PCNumber 2 FROM Co 阅读全文
posted @ 2018-06-11 15:56 星朝 阅读(15502) 评论(0) 推荐(1)
摘要:一、问题的提出 在应用系统开发初期,由于开发数据库数据比较少,对于查询SQL语句,复杂视图的的编写等体会不出SQL语句各种写法的性能优劣,但是如果将应用 系统提交实际应用后,随着数据库中数据的增加,系统的响应速度就成为目前系统需要解决的最主要的问题之一。系统优化中一个很重要的方面就是SQL 阅读全文
posted @ 2018-06-11 15:48 星朝 阅读(405) 评论(0) 推荐(0)
摘要://假设一个for循环 for($i = 0; $i < 10000; $i++) { for ($j = 0; $i < 50; $j++) { } } for($i = 0; $i < 50; $i++) { for ($j = 0; $i < 10000; $j++) 阅读全文
posted @ 2018-06-11 15:10 星朝 阅读(724) 评论(0) 推荐(0)
摘要:本文不涉及复杂的底层数据结构,通过explain解释SQL,并根据可能出现的情况,来做具体的优化,使千万级表关联查询第一页结果能在2秒内完成(真实业务告警系统优化结果)。   需要优化的查询:使用explain      出现了Using 阅读全文
posted @ 2018-06-11 15:09 星朝 阅读(509) 评论(0) 推荐(0)
摘要:一、为什么要用小表驱动大表 1、驱动表的定义 当进行多表连接查询时, [驱动表] 的定义为: 1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表] 2)未指定联接条件时,行数少的表为[驱动表](Important!) 忠告:如果你搞不清楚该让谁做驱动表、谁 join 谁,请让 MySQL 阅读全文
posted @ 2018-06-11 15:08 星朝 阅读(2856) 评论(0) 推荐(1)
摘要:写在前面 1、不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程 2、不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小 3、但把mysql客户端(如SQLyog,如HeidiSQL)放在桌面上,时不时拿出来 explain 阅读全文
posted @ 2018-06-11 14:41 星朝 阅读(1222) 评论(0) 推荐(0)
摘要:最近没怎么搞SQL优化,碰巧数据库被慢查询搞挂了,于是拿来练练手。 问题 通过「SHOW FULL PROCESSLIST」语句很容易就能查到问题SQL,如下: SELECT post. FROM post INNER JOIN post_tag ON post.id = post_tag.post 阅读全文
posted @ 2018-06-11 10:24 星朝 阅读(446) 评论(0) 推荐(0)
摘要:写在前面的话:    不要求每个人一定理解 联表查询(join/left join/inner join等)时的mysql运算过程;    不要求每个人一定知道线上(现在或未来)哪张表数据量大,哪张表数据量小;    & 阅读全文
posted @ 2018-06-08 18:02 星朝 阅读(376) 评论(0) 推荐(0)
摘要:解释一: These are the following conditions under which temporary tables are created. UNION queries use temporary tables. Some views require temporary tab 阅读全文
posted @ 2018-06-08 17:37 星朝 阅读(242) 评论(0) 推荐(0)
摘要:using filesort  一般人的回答是: “当行数据太大,导致内存无法容下这些数据产生的临时表时,他们就会被放入磁盘中排序。”  很不幸,这个答案是错的 ,临时表在太大的时候确实会到磁盘离去,但是EXPLAIN不会显示这些。 The truth is, filesort 阅读全文
posted @ 2018-06-08 16:55 星朝 阅读(5637) 评论(0) 推荐(1)
摘要:Using filsort文档中的解释: Mysql需要额外的一次传递,以找出如何按排序顺序检索行,通过根据联接类型浏览所有行并为所有匹配where子句的行保存排序关键字和行的指针来完成排序,然后关键字被排序,并按排序顺序检索行。额外的传递是指什么? Mysql> show create ta 阅读全文
posted @ 2018-06-08 16:43 星朝 阅读(1264) 评论(0) 推荐(0)
摘要:先看一段sql: [sql] view plain copy print?<span style="font size:18px;">SELECT         FROM  & 阅读全文
posted @ 2018-06-08 16:40 星朝 阅读(12116) 评论(2) 推荐(2)
摘要:派生表和视图的性能 从MySQL 4.1开始,它已经支持派生表、联机视图或者基本的FROM从句的子查询。 这些特性之间彼此相关,但是它们之间的性能比较如何呢? MySQL 5.0 中的派生表似乎和视图实现的方式不同,尽管我从合并的代码基数来看觉得在查询优化上应该是一样的。 派生表仍然以临时表的方式显 阅读全文
posted @ 2018-06-08 14:39 星朝 阅读(7107) 评论(0) 推荐(0)
摘要:优化GROUP BY语句 默认情况下,MySQL对所有GROUP BY col1,col2...的字段进行排序。这与在查询中指定ORDER BY col1,col2...类似。因此,如果显式包括一个包含相同的列的ORDER BY子句,则对MySQL的实际执行性能没有什么影响。 如果查询包括GROUP 阅读全文
posted @ 2018-06-08 14:38 星朝 阅读(1062) 评论(0) 推荐(0)