这几天在厦门讲课,每天6小时,没有太多时间写新代码,宾馆不知道咋想的也不提供WiFi,只好用手机做个热点临时分享一点基础知识,300M的包月流量伤不起,热点瞬间就把仅剩的40M流量用完了,赶紧发完关闭热点...在Python中,有while和for两种循环,并且都可以带有else子句。...其中while循环常用于无法提前确定循环次数的场合,当然也可以用于循环可以提前确定的场合;for循环常用于可以提前确定循环次数的场合,尤其适合用来迭代或遍历可迭代对象中的元素,这也是for循环的本质。...对于带有else子句的循环,如果是因为循环条件不成立或序列中的元素已迭代结束而使得循环自然结束,则继续执行else子句中的代码;而如果是因为执行了break语句使得循环提前结束,则不再执行else子句中的代码...下面的代码用来输出小于100的最大素数: ? 下面的代码用来输出小于100的所有素数: ?
http://blog.csdn.net/qq_26525215/article/details/52143733 在上面链接的博客中,写了如何用MySQL语句定义和执行存储过程 Java执行存储过程:...Java演示执行带输入参数的存储过程: 构造 call 转义序列时,请使用 ?(问号)字符来指定 IN 参数。此字符充当要传递给该存储过程的参数值的占位符。...向 setter 方法传递值时,不仅需要指定要在参数中使用的实际值,还必须指定参数在存储过程中的序数位置。例如,如果存储过程包含单个 IN 参数,则其序数值为 1。...Java演示执行带输入输出参数的存储过程: 构造 call 转义序列时,请使用 ?(问号)字符来指定 OUT 参数。 此字符充当要从该存储过程返回的参数值的占位符。...当您对于 OUT 参数向 registerOutParameter 方法传递一个值时,不仅必须指定要用于此参数的数据类型,而且必须在存储过程中指定此参数的序号位置或此参数的名称。
1.计算NULL字段的数目 为了计算null字段的数目,要掌握COUNT函数的工作原理。假设计算产品数量时,要求计入表格“product”的“product id”主键列中遗漏的字段。...=”运算也会出现异常。这里的逻辑问题在于,你编写的查询得出的是“product id”列的值是否未知,而无法得出这一列的值是否是未知的产品。...现在,由于右连接,结果中出现了d.product_id≤1的行(显然还有p.product_id>1的行)。 请注意,ON子句过滤和WHERE子句过滤只在左/右/外连接时不同,而在内连接时相同。...,并且在同一查询的WHERE子句中使用了该列,这个查询结果会出现异常。...现在,所有查询结果均为2019年的日期。 7.在GROUP BY语句后使用WHERE子句 在编写GROUP BY语句时,请注意WHERE子句的位置。
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。 (2)尽可能的使用 varchar 代替 char:可变长字段存储空间小,可以节省存储空间。...(3)当索引列大量重复数据时,可以把索引删除掉:比如有一列是性别,几乎只有男、女、未知,这样的索引是无效的。 2、优化查询语句(避免索引失效) (1)应尽量避免在 where 子句中使用!...=或操作符 (2)应尽量避免在 where 子句中使用 or 来连接条件 (3)任何查询也不要出现select * (4) 避免在 where 子句中对字段进行 null 值判断 3、索引优化(慢查询优化...) (1)对作为查询条件和 order by 的字段建立索引 (2)避免建立过多的索引,多使用组合索引 (3)分析语句,是否加载了不必要的字段/数据 (4)分析 SQL 执行句话,是否命中索引等 (5)...索引需要占物理空间,除了数据表占用数据空间之外,每一个索引还要占用一定的物理空间 以表中的数据进行增、删、改的时候,索引也要动态的维护。
存储在表中的数据是同一种类型的数据或者清单 数据库中的每个表都有自己的名字,并且这个表是唯一的。 列 表是由列组成的,列存储表中某部分的信息。列是表中的某个字段。所有的表都是由一个或者多个列组成的。...数据库中的每个列都应该是具有的相同数据类型datatype。数据类型定义了列可以存储哪些数据类型。 行 表中的数据是按照行来进行存储的,所保存的每个记录存储在自己的行内。...2、自然联结 无论何时对表进行联结,应该至少有一列不止出现在一个表中(被联结的列)。自然联结排除多次出现,是每一列只返回一次。...; 需要注意4点: 在复制的过程中,任何SELECT选项和子句都可以使用,包含WHERE 和GROUP BY子句 可以利用联结从多个表插入数据 不管从多少个表中检索数据,数据最终只能插入到一个表中 INSERT...存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
存储在表中的数据是同一种类型的数据或者清单 数据库中的每个表都有自己的名字,并且这个表是唯一的。 列 表是由列组成的,列存储表中某部分的信息。列是表中的某个字段。...,SELECT语句中的每列都必须在GROUP BY子句中列出 如果分组中包含具有NULL的行,则NULL将作为一个分组返回;如果列中出现多个NULL,它们将分成一个组 GROUP BY子句必须在WHERE...2、自然联结 无论何时对表进行联结,应该至少有一列不止出现在一个表中(被联结的列)。自然联结排除多次出现,是每一列只返回一次。...; 需要注意4点: 在复制的过程中,任何SELECT选项和子句都可以使用,包含WHERE 和GROUP BY子句 可以利用联结从多个表插入数据 不管从多少个表中检索数据,数据最终只能插入到一个表中 INSERT...存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 尽量避免大事务操作,提高系统并发能力。...在子查询中,NOT IN子句将执行一个内部的排序和合并. 无论在哪种情况下,NOT IN都是最低效的 (因为它对子查询中的表执行了一个全表遍历)...., 只有在它的第一个列(leading column)被where子句引用时,优化器才会选择使用该索引....如果系统出现问题,这样做会救你一命的。一般有些经验的程序员都有体会—–你经常会碰到一些不可预料的情况会导致存储过程崩溃。
22,在IN后面值的列表中,将出现最频繁的值放在最前面,出现得最少的放在最后面,减少判断的次数。 23,尽量将数据的处理工作放在服务器上,减少网络的开销,如使用存储过程。...存储过程是编译好、优化过、并且被组织到一个执行规划里、且存储在数据库中的SQL语句,是控制流语言的集合,速度当然快。反复执行的动态SQL,可以使用临时存储过程,该过程(临时表)被放在Tempdb中。...36,避免死锁,在你的存储过程和触发器中访问同一个表时总是以相同的顺序;事务应经可能地缩短,在一个事务中应尽可能减少涉及到的数据量;永远不要在事务中等待用户输入。...0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!...无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC 消息。 29.尽量避免大事务操作,提高系统并发能力。
0,确保表中num列没有null值,然后这样查询: select id from t where num=0 4、应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描...因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...28、在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 29、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
其他数据库也叫做唯一索引扫描 C:eq_ref:出现在要连接过个表的查询计划中,驱动表只返回一行数据,且这行数据是第二个表的主键或者唯一索引,且必须为not null,唯一索引和主键是多列时,只有所有的列都用作比较时才会出现...extra extra 列显示了查询过程中需要执行的其它操作,有些情况应尽力避免。 using filesort: 查询时执行了排序操作而无法使用索引排序。...0,确保表中num列没有null值,然后这样查询: select id from t where num=0 4.应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描...28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 29.尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
0,确保表中num列没有null值,然后这样查询: select id from t where num=0 尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描...如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先 truncate table ,然后 drop table ,这样可以避免系统表的较长时间锁定。...对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。 尽量避免大事务操作,提高系统并发能力。
在子查询中,NOT IN子句将执行一个内部的排序和合并。无论在哪种情况下,NOT IN都是最低效的,因为它对子查询中的表执行了一个全表遍历。...因为空值不存在于索引列中,所以WHERE子句中对索引列进行空值比较将使SQLSERVER停用该索引。...这是因为SQLServer在执行以sp_为前缀的任何一个存储过程时缺省地首先试图在Master数据库里寻找,尽管那儿没有,这就浪费了寻找存储过程的时间。...如果SQLServer在Master数据库里不能找到存储过程,那么接下来会将存储过程的拥有者作为DBO去解析。如果存储过程在目前的数据库里,那么它会执行。...如果不是那样,即对象名相同而拥有者不同,那么SQLServer必须执行名称判断。当发生这样的情形时,SQLServer不能使用存储过程里在内存里的执行计划,相反,它必须重新编译存储过程,从而影响性能。
0,确保表中num列没有null值,然后这样查询:select id from t where num=0 3.应尽量避免在 where 子句中使用!...然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC 消息。 29.尽量避免大事务操作,提高系统并发能力。
select id from t where num is null? 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:?...因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 尽量避免大事务操作,提高系统并发能力。 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: selectidfromtwherenum=0; 3、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时...因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不可太多,执行UPDATE DELETE INSERT语句需要用于维护这些索引的开销量急剧增加;避免在索引中有太多的索引键;避免使用大型数据类型的列为索引...3、使用存储过程(注意:阿里巴巴开发规范中已经明确禁止使用存储过程了,这里只是列出,不作为优化方法!)...应用程序的实现过程中,能够采用存储过程实现的对数据库的操作尽量通过存储过程来实现,因为存储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应用可以简单地执行存储过程,
0,确保表中num列没有null值,然后这样查询: select id from t where num=0 3.应尽量避免在 where 子句中使用!...然 而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...28.在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 29.尽量避免大事务操作,提高系统并发能力。
应尽量避免在where子句中对字段进行null值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:selectidfromtwherenumisnull可以在num上设置默认值0,确保表中num列没有...然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...对小型数据集使用FAST_FORWARD游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。 28.在所有的存储过程和触发器的开始处设置SETNOCOUNTON,在结束时设置SETNOCOUNTOFF。...无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC消息。 29.尽量避免大事务操作,提高系统并发能力。
0,确保表中num列没有null值,然后这样查询: select id from t where num=0; 04 应尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描...因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。...对小型数据集使用 FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。在结果集中包括“合计”的例程通常要比使用游标执行的速度快。...28 在所有的存储过程和触发器的开始处设置 SET NOCOUNT ON ,在结束时设置 SET NOCOUNT OFF 。...无需在执行存储过程和触发器的每个语句后向客户端发送 DONE_IN_PROC 消息。 29 尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
领取专属 10元无门槛券
手把手带您无忧上云