MySQL大数据量的查询提高性能优化
MySQL的处理大数据量的优化技巧

MySQL的处理大数据量的优化技巧MySQL是一款广泛应用于大数据处理的关系型数据库管理系统。
随着互联网的发展,数据量的快速增长成为了各行各业面临的挑战之一。
为了保证系统的高性能和稳定性,优化MySQL的处理大数据量的技巧显得尤为重要。
本文将从索引优化、查询优化和硬件优化三个方面为读者介绍MySQL的处理大数据量的优化技巧。
一、索引优化索引是提高查询效率的重要手段,合理使用索引可以大幅度减少系统的响应时间。
下面将从选择合适的索引列、优化复合索引、使用覆盖索引和避免过多索引四个方面为读者详细介绍。
首先,选择合适的索引列非常重要。
一般来说,对于经常进行条件查询的列,如手机号、用户名等,应当优先考虑加索引以提高查询效率。
但是需要注意的是,不是所有的列都适合建立索引,过多的索引可能会导致额外的存储开销和维护成本。
其次,优化复合索引也是提高查询效率的一种方法。
在MySQL中,复合索引是指由多个列组成的索引。
当需要同时按多个列进行检索时,复合索引可以减少磁盘I/O操作,提高查询速度。
因此,根据实际需求选择合适的列组合建立复合索引是非常重要的。
第三,使用覆盖索引可以减少回表操作,进一步提高查询效率。
所谓覆盖索引,是指查询语句只需要通过索引就可以获取到所需的数据,而不需要再访问数据表。
使用覆盖索引可以减少磁盘I/O操作,提高查询速度。
最后,需要注意避免过多索引。
虽然索引可以提高查询效率,但是过多的索引可能会导致额外的存储开销和维护成本。
因此,在建立索引时需要根据实际需求进行选择,避免过多索引对系统性能造成负面影响。
二、查询优化在处理大数据量时,查询优化是非常重要的。
下面将从合理使用查询语句、使用连接和子查询、避免全表扫描和及时清理无用数据四个方面为读者介绍。
首先,合理使用查询语句可以提高查询效率。
常见的查询语句有SELECT、INSERT、UPDATE和DELETE。
在使用这些语句时,可以通过使用合适的条件语句和索引来提高查询效率。
企业级Mysql数据库应用实战

企业级Mysql数据库应用实战随着大数据时代的到来,企业级应用系统的数据量更加庞大,这就对数据库的容量和性能提出了更高的要求。
Mysql数据库作为当前最流行的开源关系型数据库之一,已经广泛应用于各类企业级应用系统。
本文将从实战的角度,介绍Mysql数据库的应用场景、容量规划、性能调优、高可用架构等方面,帮助读者理解企业级Mysql数据库的实际应用。
一、企业级Mysql数据库的应用场景企业级应用系统的数据分为结构化数据和半结构化\/非结构化数据,Mysql数据库主要应用于结构化数据的存储和管理,例如电子商务网站、在线支付系统、物流信息系统等。
Mysql数据库的应用场景包括:1. 电子商务网站电子商务网站是一个数据量极大的应用场景,常见的数据包括商品信息、订单信息、用户信息等。
对于这种应用,Mysql数据库需要支持高并发访问,并且能够快速地处理大量的事务请求。
2. 在线支付系统在线支付系统需要处理大量的交易数据,并且保证数据的安全性和准确性。
Mysql数据库需要保证数据的完整性和一致性,并支持高并发的读写访问。
3. 物流信息系统物流信息系统需要对订单和货物进行跟踪查询,需要大量的数据存储和高并发的读取。
Mysql数据库需要支持大量的查询操作,并且能够快速地返回结果。
二、企业级Mysql数据库的容量规划容量规划是企业级Mysql数据库部署的重要一步,它决定了数据库的容量以及性能指标。
下面介绍几个关键因素:1. 数据规模数据规模是决定Mysql数据库容量的重要因素。
在规划容量时,需要考虑当前数据量以及未来的数据增长率。
一般来说,Mysql数据库的存储容量应该留有一定的预留空间,以应对未来的数据增长。
2. 内存容量内存容量是Mysql数据库性能的关键因素之一。
在容量规划时,需要考虑数据库中需要缓存的数据量大小,以及数据库中需要执行的查询操作和事务操作。
通常情况下,建议将一部分的内存用于缓存数据,提高查询操作的性能。
mysql性能优化精品PPT课件

目录索引
MySQL优化方式 MySQL技巧分享 MySQL函数
MySQL优化方式
MySQL优化方式
系统优化:硬件、架构 服务优化 应用优化
系统优化
使用好的硬件,更快的硬盘、大内存、多核CPU,专业的存 储服务器(NAS、SAN)
设计合理架构,如果 MySQL 访问频繁,考虑 Master/Slave 读写分离;数据库分表、数据库切片(分布式),也考虑使 用相应缓存服务帮助 MySQL 缓解访问压力
选项
max_connections query_cache_size sort_buffer_size
record_buffer table_cache
缺省值
100 0 (不打开)M 16M
16M 512
说明
MySQL服务器同时处理的数据库连接的最大数量
查询缓存区的最大长度,按照当前需求,一倍一倍 增加,本选项比较重要
每个线程的排序缓存大小,一般按照内存可以设置 为2M以上,推荐是16M,该选项对排序order by, group by起作用
每个进行一个顺序扫描的线程为其扫描的每张表分 配这个大小的一个缓冲区,可以设置为2M以上
为所有线程打开表的数量。增加该值能增加mysqld 要求的文件描述符的数量。MySQL对每个唯一打开 的表需要2个文件描述符。
8M
128M 0 256M
innodb_log_buffer_size
128K
8M
说明
InnoDB使用一个缓冲池来保存索引和原始数据, 这 里你设置越大,你在存取表里面数据时所需要的磁盘 I/O越少,一般是内存的一半,不超过2G,否则系 统会崩溃,这个参数非常重要
InnoDB用来保存 metadata 信息, 如果内存是4G, 最好本值超过200M
MySQL中的IO性能优化和文件存储方案

MySQL中的IO性能优化和文件存储方案引言:MySQL是一款广泛应用于互联网和企业级应用的关系型数据库管理系统。
在处理大数据量和高并发请求时,优化IO性能和选择合适的文件存储方案对于提升MySQL系统的性能至关重要。
本文将从IO性能优化和文件存储方案两个方面探讨如何提升MySQL的性能。
一、IO性能优化1. 合理配置磁盘类型和RAID级别MySQL的存储引擎通常将数据文件、索引文件和日志文件存储在磁盘上。
针对不同的应用场景,我们需要根据磁盘类型进行合理的配置。
对于读写比较均衡的工作负载,可以选择固态硬盘(SSD)来提升IO性能。
对于以写入为主的工作负载,使用具备较好的随机写性能的机械硬盘可能更为合适。
此外,RAID(冗余磁盘阵列)技术也可以提升IO性能和数据冗余性。
选择合适的RAID级别(如RAID 0、RAID 1、RAID 5等),可以根据应用需求实现对读写性能和数据安全的平衡。
2. 配置适当的磁盘缓存磁盘缓存对于提升IO性能有着重要的作用。
可以通过调整文件系统缓存来改善MySQL的IO性能。
在Linux系统下,可以通过修改/etc/fstab文件中的参数来配置磁盘缓存策略。
例如,可以通过设置noatime参数来禁用文件系统的访问时间更新,从而减少不必要的IO操作。
同时,根据服务器内存的大小,合理设置读写缓存的大小(如通过修改vm.dirty_ratio和vm.dirty_background_ratio参数)以提高缓存的效果。
3. 优化磁盘调度算法操作系统提供了多种磁盘调度算法,如CFQ、Deadline、NOOP等。
不同的调度算法对于不同的应用场景有着不同的适用性。
可以根据MySQL的工作负载特点,选择适合的磁盘调度算法来提升IO性能。
例如,对于以读取为主的工作负载,可以选择NOOP调度算法,它忽略IO请求的优先级,只按照先后顺序依次处理,从而减少了磁盘头寻道的时间。
而对于以写入为主的工作负载,可以选择Deadline调度算法,它将重点考虑IO请求的截止时间,以保证关键的写操作及时完成。
mysql调优(show status篇)

通过show status 来优化MySQL数据库关键字: mysql1, 查看MySQL服务器配置信息1.mysql> show variables;2, 查看MySQL服务器运行的各种状态值1.mysql> show global status;3, 慢查询1.mysql> show variables like '%slow%';2.+------------------+-------+3.| Variable_name | Value |4.+------------------+-------+5.| log_slow_queries | OFF |6.| slow_launch_time | 2 |7.+------------------+-------+8.mysql> show global status like '%slow%';9.+---------------------+-------+10.| Variable_name | Value |11.+---------------------+-------+12.| Slow_launch_threads | 0 |13.| Slow_queries | 279 |14.+---------------------+-------+配置中关闭了记录慢查询(最好是打开,方便优化),超过2秒即为慢查询,一共有279条慢查询4, 连接数1.mysql> show variables like 'max_connections';2.+-----------------+-------+3.| Variable_name | Value |4.+-----------------+-------+5.| max_connections | 500 |6.+-----------------+-------+7.8.mysql> show global status like 'max_used_connections';9.+----------------------+-------+10.| Variable_name | Value |11.+----------------------+-------+12.| Max_used_connections | 498 |13.+----------------------+-------+设置的最大连接数是500,而响应的连接数是498max_used_connections / max_connections * 100% = 99.6% (理想值≈ 85%)5, key_buffer_sizekey_buffer_size是对MyISAM表性能影响最大的一个参数, 不过数据库中多为Innodb1.mysql> show variables like 'key_buffer_size';2.+-----------------+----------+3.| Variable_name | Value |4.+-----------------+----------+5.| key_buffer_size | 67108864 |6.+-----------------+----------+7.8.mysql> show global status like 'key_read%';9.+-------------------+----------+10.| Variable_name | Value |11.+-------------------+----------+12.| Key_read_requests | 25629497 |13.| Key_reads | 66071 |14.+-------------------+----------+一共有25629497个索引读取请求,有66071个请求在内存中没有找到直接从硬盘读取索引,计算索引未命中缓存的概率:key_cache_miss_rate =Key_reads / Key_read_requests * 100% =0.27%需要适当加大key_buffer_size1.mysql> show global status like 'key_blocks_u%';2.+-------------------+-------+3.| Variable_name | Value |4.+-------------------+-------+5.| Key_blocks_unused | 10285 |6.| Key_blocks_used | 47705 |7.+-------------------+-------+Key_blocks_unused表示未使用的缓存簇(blocks)数,Key_blocks_used表示曾经用到的最大的blocks数Key_blocks_used / (Key_blocks_unused + Key_blocks_used) * 100% ≈ 18% (理想值≈ 80%)6,临时表1.mysql> show global status like 'created_tmp%';2.+-------------------------+---------+3.| Variable_name | Value |4.+-------------------------+---------+5.| Created_tmp_disk_tables | 4184337 |6.| Created_tmp_files | 4124 |7.| Created_tmp_tables | 4215028 |8.+-------------------------+---------+每次创建临时表,Created_tmp_tables增加,如果是在磁盘上创建临时表,Created_tmp_disk_tables也增加,Created_tmp_files表示MySQL服务创建的临时文件文件数:Created_tmp_disk_tables / Created_tmp_tables * 100% =99% (理想值<= 25%)1.mysql> show variables where Variable_name in ('tmp_table_size', 'max_heap_table_size');2.+---------------------+-----------+3.| Variable_name | Value |4.+---------------------+-----------+5.| max_heap_table_size | 134217728 |6.| tmp_table_size | 134217728 |7.+---------------------+-----------+需要增加tmp_table_size7,open table 的情况1.mysql> show global status like 'open%tables%';2.+---------------+-------+3.| Variable_name | Value |4.+---------------+-------+5.| Open_tables | 1024 |6.| Opened_tables | 1465 |7.+---------------+-------+Open_tables 表示打开表的数量,Opened_tables表示打开过的表数量,如果Opened_tables数量过大,说明配置中table_cache(5.1.3之后这个值叫做table_open_cache)值可能太小,我们查询一下服务器table_cache值1.mysql> show variables like 'table_cache';2.+---------------+-------+3.| Variable_name | Value |4.+---------------+-------+5.| table_cache | 1024 |6.+---------------+-------+Open_tables / Opened_tables * 100% =69% 理想值(>= 85%)Open_tables / table_cache * 100% = 100% 理想值(<= 95%)8, 进程使用情况1.mysql> show global status like 'Thread%';2.+-------------------+-------+3.| Variable_name | Value |4.+-------------------+-------+5.| Threads_cached | 31 |6.| Threads_connected | 239 |7.| Threads_created | 2914 |8.| Threads_running | 4 |9.+-------------------+-------+如果我们在MySQL服务器配置文件中设置了thread_cache_size,当客户端断开之后,服务器处理此客户的线程将会缓存起来以响应下一个客户而不是销毁(前提是缓存数未达上限)。
如何使用MySQL进行大数据量处理和分析

如何使用MySQL进行大数据量处理和分析在当今信息时代,我们生活在一个数据爆炸的时代。
随着科技的不断发展,数据量也不断增长,尤其是对于一些大型企业和互联网公司来说,他们经常需要处理和分析大数据量。
MySQL作为一个开源关系型数据库管理系统,具备了处理大数据量的能力,并且被使用于许多大型项目中。
本文将探讨如何使用MySQL进行大数据量的处理和分析,以及相关的技术和策略。
一、选择合适的MySQL版本和配置在处理大数据量之前,我们需要选择一个适用于大数据处理的MySQL版本,并进行相应的配置。
MySQL提供了多个版本,例如MySQL Community Edition、MySQL Cluster、MySQL Enterprise等。
针对大数据场景,我们可以选择MySQL Cluster,它具备了横向扩展和高可用性的特点。
此外,我们还需要根据实际需求对MySQL进行适当的配置,包括调整缓存大小、并发连接数、索引等参数,以提高MySQL的性能和稳定性。
二、数据分区和分表技术一般来说,大数据量的处理和分析涉及到的数据通常都是分布在多个表中的。
在MySQL中,我们可以使用数据分区和分表技术来提高查询速度和降低负载。
数据分区是将一个表按照某个规则划分为多个分区,分别存储在不同的文件中,以提高查询效率。
而分表是将一个表按照某个规则划分为多个子表,可以根据查询的条件选择相应的子表进行查询。
通过合理的数据分区和分表策略,我们可以充分利用MySQL的横向扩展能力,提高处理和分析大数据量的效率。
三、合理设计数据库结构和索引在处理和分析大数据量时,数据库的结构设计至关重要。
合理的数据库结构可以提高查询效率,并减少数据库的冗余和复杂度。
首先,我们需要根据业务需求和数据特点设计合适的数据表和字段。
其次,我们需要根据查询的频率和方式来设计相应的索引。
索引可以加快数据库查询的速度,但也会增加数据库的存储和维护成本。
因此,我们需要根据实际情况权衡利弊,并选择合适的索引类型和数量。
MySQL数据导入与导出的性能调优方法

MySQL数据导入与导出的性能调优方法随着大数据时代的到来,数据的快速导入和导出成为了数据库管理和分析的重要环节。
尤其对于MySQL这样被广泛应用的关系型数据库而言,提高数据导入和导出的性能是一个非常关键的问题。
本文将介绍一些MySQL数据导入与导出的性能调优方法,帮助读者更好地应对这一挑战。
一、数据导入性能调优方法1. 数据文件格式选择MySQL支持多种数据文件格式,如CSV、JSON、XML等。
在进行数据导入之前,根据实际情况选择合适的格式是非常重要的。
一般来说,CSV格式是导入性能最高的,而JSON和XML格式由于其结构化的特点,在处理复杂数据时更为方便。
2. 批量导入对于大量数据的导入,最好使用批量导入的方式,而不是逐条插入。
这样可以减少事务开销和网络通信的次数,提高导入的效率。
MySQL提供了LOAD DATA INFILE语句,可以将数据直接加载到表中,比INSERT语句效率更高。
此外,可以结合使用事务和批量提交,提高导入性能。
3. 禁用索引在进行数据导入时,禁用索引是提高导入性能的一种常用方法。
索引的维护需要额外的时间和资源,对于导入操作而言是多余的。
可以使用ALTER TABLE语句将索引禁用,导入完成后再重新启用索引。
4. 使用并行导入对于大量数据的导入,可以考虑使用并行导入的方式,将数据分成多个文件进行导入,提高导入的并发性能。
MySQL 5.7版本之后支持并行导入,可以设置导入线程的数量,根据实际需求进行调整。
二、数据导出性能调优方法1. 查询性能优化在进行数据导出之前,要先对导出的查询进行性能优化。
可以通过创建合适的索引、优化查询语句等方法提高查询速度。
尽量减少查询涉及的表、字段和条件,避免全表扫描和不必要的计算。
2. 数据传输压缩在将数据导出到文件中时,可以考虑使用数据传输压缩的方式,减少传输的数据量和时间。
MySQL提供了mysqldump命令,可以使用--compress选项对导出的数据进行压缩,减少输出文件的大小。
数据库中大数据导入与导出的性能优化技巧

数据库中大数据导入与导出的性能优化技巧随着数据的快速增长和业务的发展,大数据的处理和分析已经变得越来越重要。
在数据库中,大数据的导入和导出操作是常见的任务。
然而,由于大数据量的特点,这些操作可能会变得非常耗时和低效。
因此,为了提高数据导入和导出的性能,我们需要一些优化技巧。
1. 使用合适的导入工具在数据库中,有许多工具和方法可以用于数据的导入和导出操作。
选择一个合适的工具是提高性能的第一步。
一些流行的导入工具包括MySQL的LOAD DATA INFILE语句、PostgreSQL的COPY命令以及Oracle的SQL*Loader工具等。
根据具体情况选择最合适的工具可以显著提高导入和导出的性能。
此外,使用并行导入工具也是一个提高性能的好方法。
并行导入工具可以同时使用多个线程或进程,从而加快导入和导出的速度。
可以使用类似于Oracle的并行导入工具如Data Pump或SQL Server的并行数据仓库负载运行器等工具,根据具体数据库产品选择合适的工具。
2. 批量插入和更新在大数据导入中,我们可以使用批量插入和更新操作来优化性能。
相比逐条插入或更新的方式,批量操作可以减少与数据库的交互次数,从而减少了网络开销和数据库锁定时间。
例如,在MySQL中,可以使用INSERT INTO ... VALUES、INSERTINTO ... SELECT或LOAD DATA INFILE等语句来实现批量插入;而在Oracle中,可以使用SQL*Loader或外部表等技术实现批量插入。
在批量插入和更新时,还可以考虑使用过程性操作。
这样可以把多个操作封装在一个事务中,提高整体的性能和数据的一致性。
例如,在PostgreSQL中,可以使用存储过程或触发器将多个操作包装在一个过程中,从而减少了事务的开销。
诸如此类,根据具体数据库产品的特性,选择合适的方法来进行批量操作。
3. 数据预处理和优化在进行大数据导入和导出操作之前,预处理和优化数据也是提高性能的关键步骤之一。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
最近一段时间参与的项目要操作百万级数据量的数据,普通SQL查询效率呈直线下降,而且如果where中的查询条件较多时,其查询速度简直无法容忍。
之前数据量小的时候,查询语句的好坏不会对执行时间有什么明显的影响,所以忽略了许多细节性的问题。
经测试对一个包含400多万条记录的表执行一条件查询,其查询时间竟然高达40几秒,相信这么高的查询延时,任何用户都会抓狂。
因此如何提高sql语句查询效率,显得十分重要。
以下是结合网上流传比较广泛的几个查询语句优化方法:
基本原则:数据量大的时候,应尽量避免全表扫描,应考虑在where 及order by 涉及的列上建立索引,建索引可以大大加快数据的检索速度。
但是,有些情况索引是不会起效的,因此,需要下面的做法进行优化:
1、应尽量避免在where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。
2、应尽量避免在where 子句中对字段进行null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num is null
可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num=0
3、尽量避免在where 子句中使用or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如:
select id from t where num=10 or num=20
可以这样查询:
select id from t where num=10
union all
select id from t where num=20
4、下面的查询也将导致全表扫描:
select id from t where name like ‘%abc%’
若要提高效率,可以考虑全文检索。
5、in 和not in 也要慎用,否则会导致全表扫描,如:
select id from t where num in(1,2,3)
对于连续的数值,能用between 就不要用in 了:
select id from t where num between 1 and 3
6、如果在where 子句中使用参数,也会导致全表扫描。
因为SQL只有在运行时才会解析局部变量,但优化程序不能将访问计划的选择推迟到运行时;它必须在编译时进行选择。
然而,如果在编译时建立访问计划,变量的值还是未知的,因而无法作为索引选择的输入项。
如下面语句将进行全表扫描:
select id from t where num=@num
可以改为强制查询使用索引:
select id from t with(index(索引名)) where num=@num
7、应尽量避免在where 子句中对字段进行表达式操作,这将导致引擎放弃使用索引而进行全表扫描。
如:
select id from t where num/2=100
应改为:
select id from t where num=100*2
8、应尽量避免在where子句中对字段进行函数操作,这将导致引擎放弃使用索引而进行全表扫描。
如:
select id from t where substring(name,1,3)=’abc’–name以abc开头的id
select id from t where
datediff(day,createdate,’2005-11-30′)=0–’2005-11-30′生成的id 应改为:
select id from t where name like ‘abc%’
select id from t where createdate>=’2005-11-30′ and
createdate<’2005-12-1′
9、不要在where 子句中的“=”左边进行函数、算术运算或其他表达式运算,否则系统将可能无法正确使用索引。
10、在使用索引字段作为条件时,如果该索引是复合索引,那么必须使用到该索引中的第一个字段作为条件时才能保证系统使用该索引,否则该索引将不会被使用,并且应尽可能的让字段顺序与索引顺序相一致。
11、不要写一些没有意义的查询,如需要生成一个空表结构:
select col1,col2 into #t from t where 1=0
这类代码不会返回任何结果集,但是会消耗系统资源的,应改成这样:
create table #t(…)
12、很多时候用exists 代替in 是一个好的选择:
select num from a where num in(select num from b)
用下面的语句替换:
select num from a where exists(select 1 from b where num=a.num)
建索引需要注意的地方:
1、并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引也对查询效率起不了作用。
2、索引并不是越多越好,索引固然可以提高相应的select 的效率,但同时也降低了insert 及update 的效率,因为insert 或update 时有可能会重建索引,所以怎样建索引需要慎重考虑,视具体情况而定。
一个表的索引数最好不要超过6个,若太多则应考虑一些不常使用到的列上建的索引是否有必要。
3、应尽可能的避免更新clustered 索引数据列,因为clustered 索引数据列的顺序就是表记录的物理存储顺序,一旦该列值改变将导致整个表记录的顺序的调整,会耗费相当大的资源。
若应用系统需要频繁更新clustered 索引数据列,那么需要考虑是否应将该索引建为clustered 索引。
其他需要注意的地方:
1、尽量使用数字型字段,若只含数值信息的字段尽量不要设计为字符型,这会降低查询和连接的性能,并会增加存储开销。
这是因为引擎在处理查询和连接时会逐个比较字符串中每一个字符,而对于数字型而言只需要比较一次就够了。
2、任何地方都不要使用select * from t ,用具体的字段列表代替“*”,不要返回用不到的任何字段。
3、尽量使用表变量来代替临时表。
如果表变量包含大量数据,请注意索引非常有限(只有主键索引)。
4、避免频繁创建和删除临时表,以减少系统表资源的消耗。
5、临时表并不是不可使用,适当地使用它们可以使某些例程更有效,例如,当需要重复引用大型表或常用表中的某个数据集时。
但是,对于一次性事件,最好使用导出表。
6、在新建临时表时,如果一次性插入数据量很大,那么可以使用select into 代替create table,避免造成大量log ,以提高速度;如果数据量不大,为了缓和系统表的资源,应先create table,然后insert。
7、如果使用到了临时表,在存储过程的最后务必将所有的临时表显式删除,先truncate table ,然后drop table ,这样可以避免系统表的较长时间锁定。
8、尽量避免使用游标,因为游标的效率较差,如果游标操作的数据超过1万行,那么就应该考虑改写。
9、使用基于游标的方法或临时表方法之前,应先寻找基于集的解决方案来解决问题,基于集的方法通常更有效。
10、与临时表一样,游标并不是不可使用。
对小型数据集使用
FAST_FORWARD 游标通常要优于其他逐行处理方法,尤其是在必须引用几个表才能获得所需的数据时。
在结果集中包括“合计”的例程通常要比使用游标执行的速度快。
如果开发时间允许,基于游标的方法和基于集的方法都可以尝试一下,看哪一种方法的效果更好。
11、在所有的存储过程和触发器的开始处设置SET NOCOUNT ON ,在结束时设置SET NOCOUNT OFF 。
无需在执行存储过程和触发器的每个语句后向客户端发送DONE_IN_PROC 消息。
12、尽量避免向客户端返回大数据量,若数据量过大,应该考虑相应需求是否合理。
13、尽量避免大事务操作,提高系统并发能力。