MSSQL Server 查询优化方法 整理
关于查询速度慢的原因及其优化策略
查询速度慢是一个常见的问题,其背后隐藏着多种原因。以下是对这些问题的详细解读及相应的优化策略。
一、查询慢的原因
1. 没有索引或未正确使用索引:这是查询慢的最常见问题之一,往往源于程序设计的缺陷。索引是数据库优化的关键,没有索引就像在没有导航的森林里寻找方向一样困难。
2. I/O吞吐量小导致的瓶颈效应:当数据读写速度受到存储设备的限制时,就会形成瓶颈。
3. 计算列缺失导致的查询不优化:如果查询中涉及到计算,而没有预先创建计算列,那么每次查询都需要进行计算,导致效率低下。
4. 内存不足:数据库运行需要大量的内存支持,内存不足会导致数据交换频繁,影响查询速度。
5. 网络速度慢:在网络环境下,网络的速度直接影响数据库查询的响应速度。
6. 数据量过大:当查询返回的数据量过大时,处理时间自然会增长。此时可以考虑采用分页查询等方式降低数据量。
7. 锁或死锁问题:这也是查询慢的一个常见问题,源于程序设计的缺陷。读写竞争资源导致的锁或死锁会严重影响查询效率。
二、优化策略
针对以上问题,可以采取以下策略进行优化:
1. 优化索引:根据查询条件建立合适的索引,提高数据检索速度。注意选择合适的填充因子和索引列的大小。
2. 硬件升级:提高服务器的CPU性能、增加内存和I/O设备,提升数据库的处理能力。
3. 数据分区:纵向或横向分割表,减少表的尺寸,提高查询效率。
4. 合理利用设备资源:合理分配虚拟内存、物理内存和CPU资源,确保数据库的高效运行。对于全文检索功能,需要配置足够的内存资源。
5. 优化查询语句:针对查询语句进行优化,避免不必要的行列返回,提高查询效率。
6. 数据库与应用程序分离:将数据库服务器和应用程序服务器分离,OLTP和OLAP分离,以提高系统的整体性能。
7. 分布式处理:使用分布式分区视图实现数据库服务器联合体,分散处理负荷,支持大型多层Web站点的处理需要。
8. 重建索引:定期重建和优化索引,保持数据库的最佳状态。
9. 注意T-sql的写法:DBMS处理查询计划的过程包括词法、语法检查,优化器做代数优化和存取路径的优化等。合理的T-sql写法能大大提高查询效率。
理解数据库的数据存放结构也很重要,一个页面的大小为8K字节,8个页面为一个盘区,数据按照B树结构存放。对Commit和rollback的区别也要有所了解,Rollback用于回滚所有事物操作。
优化数据库查询需要综合考虑各个方面,从硬件、软件、设计、编程等多个角度入手,确保数据库的高效运行。对事务和数据库操作的深刻理解与应用——深入SQL事务处理和并发控制策略
在数据库操作中,事务管理和并发控制是两个至关重要的环节。对于SQL编程人员来说,理解和掌握这些概念不仅有助于提高编程技能,更是保障数据安全,优化数据库性能的关键。本文将详细解读关于提交事务、动态SQL、游标以及并发控制等方面的知识。
关于事务的提交。在数据库操作中,事务是一系列的操作集合,这些操作要么全部成功执行,要么全部不执行,从而保证数据的完整性和一致性。在动态SQL中,我们并不建议在事务内部执行动态SQL语句,而是更倾向于将动态SQL语句置于事务外部执行,如使用"begin tran","exec(@s)","mit trans"等语句。这样可以避免在动态SQL执行过程中产生不必要的复杂性,影响事务管理的效率。
对于查询语句中的SELECT语句,我们应尽可能使用WHERE子句来限制返回的行数。避免不必要的表扫描,以减少对服务器I/O资源的消耗,降低网络负担,提高性能。特别是在处理大型表时,表扫描可能会锁定表,阻止其他连接访问,后果严重。
关于SQL的注释声明。注释是为了提高代码的可读性,对执行没有任何影响。编写清晰的注释对于理解代码逻辑、排查错误非常有帮助。
然后,我们需要注意尽量避免使用游标。尽管在某些情况下,游标是必要的,但由于其占用大量资源,如果可能的话,我们应寻找其他方法替代游标操作,如使用临时表、Table变量、子查询、Case语句等。游标的类型和功能丰富多样,包括只读滚动锁等并发选项。其中乐观并发控制和悲观并发控制是两种主要的并发控制策略。乐观并发控制假设冲突很少发生,因此在进行数据修改前不会立即锁定数据。而悲观并发控制则是在读取数据时立即锁定数据。"SCROLL LOCKS"这个选项实现的是悲观并发控制中的一种方式。
关于锁的提示。锁提示是用于控制并发操作时的锁定行为的关键元素。例如,"NOLOCK"提示会关闭锁的使用,"HOLDLOCK"则会保持共享锁直到事务结束,"UPDLOCK"则会尝试更新并锁定行等。这些锁提示的使用需要根据具体的业务需求和数据库设计来决定。
深入理解并正确应用这些SQL事务处理和并发控制策略,可以帮助我们更有效地管理数据库事务,优化数据库性能,确保数据的安全性和完整性。对于开发人员来说,这也是不断提升自身技能、适应不断变化的技术环境的重要途径。利用Profiler跟踪查询,精确测量查询所需时间,深入理解SQL性能瓶颈;采用索引优化器精准调整索引结构以提高查询效率。
深入了解UNION和UNION ALL的差异,通常情况下,UNION ALL能提供更高的查询效率。在使用DISTINCT时,需审慎考虑,因为它与UNION类似,可能会使查询速度变慢。当查询结果中允许存在重复记录时,无需使用DISTINCT。
在构建查询时,应避免返回不必要的行和列,优化数据检索。通过sp_configure管理'query governor cost limit',合理限制查询消耗的资源。当查询资源消耗超过设定限制时,服务器将主动终止查询。同样,通过SET LOCKTIME精细控制锁的时间。
使用select语句结合百分比(如SELECT 100 / 10 PERCENT)来限制返回的行数,或者使用SET ROWCOUNT来精确控制操作行数。需要注意的是,在SQL 2000之前的版本中,应避免使用特定关键字如"IS NULL"、"<>"、"NOT EXISTS"、"NOT IN"等,因为它们可能无法有效利用索引,导致全表扫描。避免在WHERE子句中对列名使用函数,如果必须使用,考虑创建计算列并为其建立索引。对于含有空值的列,SQL Server 2000及之后的版本已经能够优化处理。
利用Query Analyzer查看SQL语句的查询计划,判断是否为最优查询。实际上,20%的代码往往消耗了80%的资源,优化这些代码是提高性能的关键。当使用IN或OR时发现查询未使用索引时,可以尝试使用显示声明来指定索引。例如:SELECT FROM PersonMember (INDEX = IX_Title) WHERE processid IN (‘男’,‘女’)。
预先计算查询结果并存入表中,然后在需要时直接SELECT。这在SQL 7.0之前的版本中尤为重要。例如,对于医院住院费的计算场景。MIN()和MAX()函数能够充分利用合适的索引。
对于视图的使用,特别要注意的是避免嵌套视图和指向多个表的视图。嵌套视图不仅增加了查询的复杂性,还可能导致原始数据查找困难。为了提高视图的查询速度,MsSQL提供了视图索引的功能,但使用时仍需谨慎。
关于SQL查询中的DISTINCT和ORDER BY语句,它们在查询中起到了重要的作用,但同时也增加了额外的开销。如果这些操作可以在客户端执行,那么就没有必要在服务器端进行,这样可以减少不必要的开销。这也同样适用于UNION和UNION ALL操作。
在处理SQL查询时,对IN后面的值列表进行优化也是非常重要的。将出现最频繁的值放在列表的最前面,可以减少判断的次数,提高查询效率。使用SELECT INTO语句时需要注意,它可能会锁住系统表,影响其他连接的存取。创建临时表时,建议使用显式声明语句,避免使用SELECT INTO。
在处理大数据量的分组和HAVING操作时,要注意执行顺序。先通过WHERE子句筛选出合适的行,再使用GROUP BY进行分组和统计,最后用HAVING子句剔除多余的分组。这样可以减少GROUP BY和HAVING的开销,提高查询速度。如果需要进行的分组操作不包括计算,只是简单的分组,那么使用Distinct可能会更快。
一次更新多条记录通常比分多次更新每次一条要快。这意味着批处理是一个很好的处理方式。尽量减少使用临时表,可以使用结果集和Table类型的变量来代替。在SQL Server 2000及以后的版本中,计算字段是可以索引的,这有助于提高查询效率。尽量将数据处理工作放在服务器上,减少网络的开销,存储过程是一个很好的选择。存储过程是编译和优化过的SQL语句集合,速度快且效率高。对于复杂的数学计算,可以使用用户定义的函数(UDFs),但要注意函数的返回值不要过大,以免增加开销。
优化数据库操作需要深入理解查询的本质和数据库的工作方式。通过合理使用视图、存储过程、索引等技术手段,可以有效提高数据库操作的效率。用户自定义函数的执行,就像光标一样,消耗了大量的系统资源。对此,若返回的结果集较大,采用存储过程是一个更优的选择。存储过程能更有效地处理大数据集,减少资源消耗。
在编程过程中,应避免在一句话中反复使用相同的函数,这不仅会造成资源的浪费,还可能降低程序的运行效率。将结果集存储在变量中再进行调用,往往能取得更好的性能。
当我们使用SQL的SELECT COUNT()函数时,需要注意其效率可能相对较低。在可能的情况下,我们应尝试不同的写法来优化查询。相比之下,EXISTS语句的执行速度通常更快。值得注意的是,SQL中的select count(Field where Field is null) from Table和select count(Field where Field is not null) from Table的返回值是不同的,前者返回的是字段为null的记录数,后者返回的是字段有值的记录数。
当服务器的内存充足时,合理配置线程数量可以提高系统的运行效率。一种推荐的配置是线程数量等于最大连接数加5。如果服务器的内存并不充足,那么应该通过启用SQL SERVER的线程池来解决这个问题。如果不恰当地设置线程数量,可能会导致服务器的性能严重受损。
在数据库操作中,访问表的顺序非常重要。锁定表的顺序需要在所有的存储过程中保持一致,否则可能会导致死锁。死锁的发生往往是因为没有预先详细设计锁定顺序。
我们可以通过SQL Server Performance Monitor来监控硬件的负载情况。例如,如果Memory: Page Faults / sec计数器值持续走高,这可能表明系统存在内存竞争的问题。在其他参数中,% DPC Time、% Processor Time、% Privileged Time和% User Time等都能提供关于系统性能的重要信息。
关于查询关联同写的顺序优化问题
当我们需要从复杂的数据库结构中提取特定信息时,查询语句的编写顺序至关重要。针对您提供的几个查询示例,我们可以深入其背后的逻辑与效率问题。
首先来看第一个查询:
```sql
SELECT a.personMemberID
FROM chineseresume a
JOIN personmember b ON a.personMemberID = b.referenceid
WHERE a.personMemberID = 'JCNPRH39681';
```
原查询通过条件判断来执行不同的SQL语句。改后的查询使用了条件逻辑,更加简洁明了:
在没有输入负责人代码的情况下:
```sql
SELECT 负责人名
FROM P2000;
```
当输入了负责人代码时:
```sql
SELECT 负责人名
FROM P2000
WHERE 负责人代码 = :code;
```
显然,在没有输入负责人代码的情况下,第二种方法的效率更高,因为它没有额外的限制条件。当输入了负责人代码时,第二种方法依然表现更优,不仅避免了不必要的限制条件,还因为相等运算是最快的查询运算。这也提醒我们,在编程过程中不应怕麻烦,而是要追求效率。至于JOBCN的分页查询新方法,涉及到性能优化器的分析。如果瓶颈在I/O或网络速度上,现有的优化方法确实有效;如果瓶颈在CPU或内存上,可能需要考虑其他策略。值得注意的是,索引的大小也会影响查询效率,索引越小通常意味着查询速度越快。关于分页查询的具体实现方式及其优化策略:创建临时表的方式是一种常用手段。通过临时表进行分页查询可以提高性能,但需要关注几个方面。例如:使用性能优化器分析查询瓶颈是否在I/O或网络上;考虑索引大小对查询效率的影响;注意区分不同的查询方式及其适用场景。如果数据库中的表已经创建了合适的索引,并且数据量不是很大,那么使用临时表的方式可能并不是最优的选择。在这种情况下,可以考虑其他优化策略,如使用计算列来优化查询性能。针对不同的查询场景和需求,选择合适的查询策略和方式至关重要。通过深入理解数据库结构、优化查询语句和合理利用数据库资源,我们可以实现更高效的数据查询和处理。数据库性能优化:提升查询速度与效率的关键策略
随着数据量的不断增长,数据库查询面临着越来越大的挑战。为了提高查询速度并解决相关性能问题,我们需要深入理解数据库的工作原理,并采取一系列策略进行优化。以下是对数据库性能优化的深入和建议:
一、面对内存不足的挑战
当数据库遭遇内存不足时,考虑升级硬件,特别是增加服务器的内存。对于Windows 2000和SQL Server 2000系统,支持高达4-8G的内存。合理配置虚拟内存,根据并发运行的服务进行设定。考虑将虚拟内存大小设置为物理内存的1.5倍,并考虑全文检索功能的需求,可能需要更大的虚拟内存。
二、解决网络慢和数据量大问题
当数据量巨大时,提高I/O速度尤为重要。策略包括将数据、日志、索引放到不同的I/O设备上。可以横向或纵向分割表以减少表的尺寸。把数据分区并采用分布式分区视图可实现数据库服务器联合体,提高处理效率。这种机制能让一组服务器分担处理负载。值得注意的是,DB Server和Application Server应分离,OLTP和OLAP也应分离。在实施分区视图之前,必须首先水平分区表。每个成员服务器都有一个分布式分区视图,查询可以在任何成员服务器上运行。
三、优化查询性能的关键步骤
为了提高查询性能,有几个关键步骤不可忽视:建立索引是关键,特别是根据查询条件进行优化。限制结果集的数据量也很重要。注意选择合适的填充因子(建议使用默认值0)。索引应尽量小,建议在字节数小的列上建立索引。避免对有限值的字段如性别字段建立单一索引。对于使用LIKE进行查询的情况,全文索引可能是更好的选择。更新操作(UPDATE、INSERT、DELETE)尚不支持并行处理。当查询涉及很长的字段值时,应考虑使用VARCHAR类型并建立全文索引。T-sql的写法也非常关键。DBMS处理查询计划的过程包括语法检查、优化器优化等步骤。了解SQL Server的数据存放结构也很重要,如页面大小、B树存放等基本概念。
四、关于Commit和Rollback的区别与使用建议
Rollback会回滚所有事物,而Commit则提交当前事物。在动态SQL中不必写事物处理代码,如果需要可以在外部执行begin tran、exec(@s)和mit trans等命令或将动态SQL写成函数或存储过程来处理。在查询中使用Where子句限制返回的行数可以避免不必要的表扫描和浪费服务器资源。锁和死锁问题也是查询慢最常见的问题之一,需要注意程序设计的合理性。对于并发访问高的情况,可以考虑使用并行处理技术以提高效率。将单个任务分解成多个任务可以在处理器上并行运行,从而提高性能。但是更新操作暂时不支持并行处理。
数据库性能优化是一个综合性的工作,涉及到硬件升级、网络优化、查询优化等多个方面。通过深入理解数据库的工作原理并结合实际需求进行有针对性的优化策略选择和实施,我们可以显著提高数据库查询的速度和效率。SQL注释与最佳实践:从执行效率到资源管理优化
在数据库管理系统中,SQL是一种至关重要的语言。其注释声明的使用并不会对执行产生直接影响,但它们对于代码的可读性和可维护性至关重要。为了确保数据库的高效运行,我们需要关注一些关键的SQL实践。
我们应尽量避免使用光标,因为它们会占用大量资源。如果确实需要逐行执行操作,我们应寻找非光标技术解决方案,如使用客户端循环、临时表、Table变量、子查询和Case语句等。游标按其提取选项可分为不同的类型,其中“只进”是最基本的类型,只允许按行顺序提取数据。而在实际应用中,我们可能会遇到可滚动的游标,这种游标可以在任何位置提取任意行。在SQL Server 2000中,游标的功能得到了极大的增强,但其核心目的仍然是支持循环操作。
关于并发控制,乐观并发控制是事务控制理论的一个重要部分。在这种模式下,假设冲突很少发生,因此在读取和更新数据行的间隔中,即使有第二个用户更新了同一行,系统也不会锁定数据。这种机制中有两种常见的方法:OPTIMISTIC WITH VALUES和OPTIMISTIC WITH ROW VERSIONING。前者通过比较行的当前值与提取时的值来判断是否发生了冲突;而后者则使用timestamp数据类型和全局当前时间戳值来跟踪行的更改。当应用程序要求基于行版本控制的乐观并发时,如果表没有timestamp列,则服务器会默认为基于数值的乐观并发控制。SCROLL LOCKS是一种悲观并发控制方法,它会在读取数据行时尝试锁定它们。锁提示是SQL查询中的重要部分,用于控制并发控制和资源锁定。
为了提高数据库性能,我们还可以利用Profiler来跟踪查询并获取查询所需的时间。通过这种方式,我们可以找出SQL代码中的问题所在并进行优化。索引优化器是另一个重要的工具,可以帮助我们优化索引以提高查询速度。对于UNION和UNION ALL的使用,通常UNION ALL的性能更好,因为它不会像UNION那样去重结果集。我们也要注意避免不必要的DISTINCT操作,因为它们会使查询变慢。
在数据世界的征途上,我们需要明智地驾驭查询的力量。对于查询的优化,每一个细节都至关重要。让我们深入这些关键的策略与技巧。
我们要明确一点:在查询数据时,精准与高效是我们的目标。对于查询中的每一个细节,我们都要保持警觉。例如,我们应避免在查询中返回不必要的行或列。当查询消耗的资源超出预设限制时,我们可以利用sp_configure 'query governor cost limit'或SET QUERY_GOVERNOR_COST_LIMIT来确保服务器的稳定运行。当评估的查询资源超过限制时,服务器将自动取消查询,从而在源头扼杀问题。SET LOCKTIME设置锁的时间可以确保数据的完整性和并发性。
接下来,考虑限制用户返回的行数。我们可以使用select 100 / 10 Percent来实现这一点。SET ROWCOUNT也能帮助我们控制操作的行数。对于那些老旧的SQL版本,如SQL2000之前,我们需要注意避免使用某些可能导致表扫描的语句,如"IS NULL"、"NOT"、"NOT EXISTS"等。避免在WHERE子句中对列名使用函数。如果必须使用函数,我们可以考虑创建计算列并为其创建索引作为替代方案。值得注意的是,索引的使用需要适度,过多过大的索引可能会适得其反。对于含有空的列值,新的数据库优化器能够妥善处理,而相同的是,“NOT”等关键字能够优化对含有空值的列的查询。
使用Query Analyzer工具可以帮助我们查看SQL语句的查询计划,从而评估分析是否使用了优化的SQL。通常,只有一小部分代码占用了大部分的查询资源,我们需要重点关注这些瓶颈区域进行优化。如果查询没有按照预期使用索引,我们可以使用显示声明来指定索引。例如,当使用IN或OR等操作时,如果发现查询没有利用索引,我们可以通过指定索引来确保查询的高效执行。对于需要将查询结果预先计算的情况,我们可以选择将数据预先计算结果存储在表中,然后在查询时直接SELECT。这种方法在早期数据库版本中尤为重要。MIN()和MAX()函数能够充分利用合适的索引来提高查询效率。"数据库有一个原则是代码离数据越近越好",我们应该根据这一原则优化数据库设计。
在SQL查询中,应避免不必要地使用DISTINCT和ORDER BY,这些操作会增加额外的开销。它们的功效在UNION和UNION ALL操作中尤为明显。如果需要执行此类操作,应考虑在客户端进行,以减少服务器的负担。
在进行特定的SELECT查询时,要关注查询的效率。例如,对于给定的参考ID列表,要从job_query.dbo.COMPANYAD_query表中检索特定的字段信息,并按照发布日期降序排列。为了提高效率,应将IN后面的值按照出现频率排序,将最常出现的值放在前面,最少出现的放在后面,以减少判断的次数。
使用SELECT INTO语句时,应注意它会锁定系统表(如sysobjects和sysindexes),这可能阻塞其他连接的访问。创建临时表时,建议使用显式声明语句,而不是SELECT INTO。因为SELECT INTO和Create table(无论是临时表还是系统表)都会锁定系统表,所以在事务中应尽量避免使用。对于经常使用的临时表,可以考虑使用实表或临时表变量。
在处理GROUP BY和HAVING子句时,应明确它们的执行顺序。Where子句首先选择合适的行,Group By用于分组和统计行,而Having子句则用于剔除多余的分组。如果Group BY的目的仅仅是分组而不涉及计算,那么使用Distinct可能会更快。
在进行数据更新时,一次更新多条记录通常比多次更新每次一条记录更快。这体现了批处理的优点。在处理大量数据时,应尽量使用结果集和Table类型的变量来代替临时表。Table类型的变量在某些情况下比临时表更为高效。
在SQL Server 2000中,计算字段是可以索引的,但要满足一定的条件。例如,计算字段的表达必须是确定的,不能用于TEXT、Ntext和Image数据类型等。为了提高处理效率,应尽量将数据处理工作放在服务器上,减少网络开销。存储过程是完成这一任务的有效方式。它们是被编译和优化过的SQL语句集合,可以放在数据库中执行。对于复杂的数学计算,可以使用用户自定义函数(UDFs),但要注意函数的返回值大小,过大的返回值会增加开销。在返回大量结果时,倾向于使用存储过程。
要避免在一句话中反复使用相同的函数,这会导致资源浪费。将结果存储在变量中再调用通常会更快。要优化SELECT COUNT()的用法,寻找更高效的替代方案。EXISTS操作通常比COUNT()更快,但要注意区分不同的查询场景和返回值。
优化SQL查询的关键在于深入理解查询的结构和目的,以及数据库系统的行为特点。通过合理设计查询语句、使用索引、优化数据处理方式等策略,可以提高查询效率,减少资源消耗。优化服务器性能的关键在于理解并合理地配置其硬件和软件资源。对于数据库服务器而言,以下几点至关重要:
一、当服务器的内存充足时,合理配置线程数量。当线程数量等于最大连接数加五时,服务器的性能可以达到最佳状态。如果内存不足,我们需要调整策略。启用SQL Server的线程池是一个有效的解决方案。如果不恰当地设置线程数量,可能会导致服务器性能严重受损。
二、对于数据库表的访问,我们必须遵循一定的顺序。锁定表的顺序如果不一致,可能会导致死锁。死锁不仅影响性能,还可能导致系统崩溃。在设计数据库和编写存储过程时,必须预先确定并严格遵守锁定顺序。
三、监控硬件负载和数据库性能计数器是确保服务器健康运行的关键。例如,通过SQL Server Performance Monitor,我们可以观察到Memory中的Page Faults / sec计数器。如果这个值偶尔走高,表明有线程竞争内存。如果持续很高,那么可能需要增加内存或优化现有资源的使用。
四、对于CPU的使用情况,我们可以通过观察% DPC Time、% Processor Time等计数器来进行评估。如果% Processor Time持续超过95%,表明CPU是瓶颈,可能需要增加处理器或升级现有设备。特权时间和用户时间的比例也是评估系统性能的重要指标。特权时间主要用于操作系统和硬件驱动程序的运行,而用户时间主要用于数据库操作。如果特权时间比例过高,可能是由于设备故障导致的间隔增多引起的。我们需要找出并解决这些问题以提高系统性能。
在数据查询的世界里,我们一直在寻找更加高效、精准的方法。针对您提供的几个查询例子,我们来深入一下。
再来看关于JOBCN现在查询分页的新方法。我们需要通过性能优化器来分析查询性能的瓶颈。如果瓶颈在于I/O或网络速度,那么采用现有方法的基础上进行优化可能是有效的。但如果问题出在CPU或内存上,那么采用新方法可能会更好。在这里,我们可以尝试区分这两种方法的不同之处。索引越小,查询效率可能会越高。这是因为较小的索引意味着更快的查找速度。这还需要结合具体的数据库结构和数据量来考虑。
关于声明的临时表和表变量的使用。在SQL Server中,临时表和表变量常用于存储中间结果集。在这些例子中,它们被用来存储从chineseresume表中选取的数据。然后,根据FID的范围进行筛选。这样做的优点是灵活性高,适用于处理大量数据。但需要注意的是,临时表和表变量的管理需要额外的资源,因此在性能优化方面需要谨慎考虑。
编写高效的SQL查询需要深入理解数据库的结构和性能特点。我们需要根据实际情况选择最合适的查询策略,并进行优化。在这个过程中,我们可以充分利用索引、临时表和表变量等工具,提高查询效率。这也需要我们不断学习和实践,以不断提升自己的技能。
微信营销
- MSSQL Server 查询优化方法 整理
- 微信小程序 实现列表项滑动显示删除按钮的功能
- GridView分页代码简单万能实用
- 4月4日举行全国性哀悼活动
- PHP中的数组分页实现(非数据库)实例讲解
- 带密匙的php加密解密示例分享
- PHP 正则表达式小结
- 郭德纲水浒传全集
- 学习JavaScript设计模式之策略模式
- vue实现tab切换外加样式切换方法
- Laravel5.5 实现后台管理登录的方法(自定义用户表
- vue移动端项目代码拆分记录
- prototype与__proto__区别详细介绍
- windows环境下mysql的解压安装及备份和还原
- 樱花树下隐藏的故事:其背后的故事和魅力
- Angular 如何使用第三方库的方法