mysqlsql⾃动优化_SQL语句的⾃动优化_MySQL
在库应⽤系统中编写可执⾏的SQL语句可以有多种⽅式实现,但哪⼀条是最佳⽅案却难以确定。为了解决这⼀问题,有必要对SQL实施优化。简单地说,SQL语句的优化就是将性能低下的SQL语句转换成达到同样⽬的的性能更好的SQL语句。
优化的原因
数据库系统的可以分成: 设计、开发和成品三个阶段。在设计阶段进⾏优化的成本最低,收益最⼤。在成品阶段进⾏优化的成本最⾼,收益最⼩。如果将⼀个数据库系统⽐喻成⼀座楼房,在楼房建好后进⾏矫正往往成本很⾼⽽收效很⼩(甚⾄可能根本⽆法矫正),⽽在楼房设计、⽣产阶段控制好每块砖⽡的质量就能达到花费⼩⽽见效⾼的⽬的。
为了获得最⼤效益,⼈们常需要对数据库进⾏优化。数据库的优化通常可以通过对⽹络、硬件、操作系统、数据库参数和应⽤程序的优化来进⾏。根据统计,对⽹络、硬件、操作系统、数据库参数进⾏优化所获得的性能提升全部加起来只占数据库应⽤系统性能提升的40%左右,其余60%的系统性能提升全部来⾃对应⽤程序的优化。许多优化专家甚⾄认为对应⽤程序的优化可以得到80%的系统性能提升。因此可以肯定,通过优化应⽤程序来对数据库系统进⾏优化能获得更⼤的收益。
对应⽤程序的优化通常可分为两个⽅⾯: 源代码的优化和SQL语句的优化。由于涉及到对程序逻辑的改变,源代码的优化在时间成本和风险上代价很⾼(尤其是对正在使⽤中的系统进⾏优化) 。另⼀⽅⾯,源代码的优化对数据库系统性能的提升收效有限,因为应⽤程序对数据库的操作最终要表现为SQL语句对数据库的操作。
对SQL语句进⾏优化有以下⼀些直接原因:
1. SQL语句是对数据库(数据) 进⾏操作的惟⼀途径,应⽤程序的执⾏最终要归结为SQL语句的执⾏,SQL语句的效率对数据库系统的性能起到了决定性的作⽤。
2. SQL语句消耗了70%~90%的数据库资源。
3. SQL语句独⽴于程序设计逻辑,对SQL语句进⾏优化不会影响程序逻辑,相对于对程序源代码的优化,对SQL语句的优化在时间成本和风险上的代价都很低。
4. SQL语句可以有不同的写法,不同的写法在性能上的差异可能很⼤。
5. SQL语句易学,难精通。SQL语句的性能往往同实际运⾏系统的数据库结构、记录数量等有关,不存在普遍适⽤的规律来提升性能。
传统的优化⽅法
qq炫舞颜字体程序⼈员在传统上采⽤⼿⼯重写来对SQL语句进⾏优化。这主要依靠DBA或资深程序员对SQL语句执⾏计划的分析,依靠经验,尝试重写SQL语句,然后对结果和性能进⾏⽐较以试图到性能较佳的SQL语句。这种做法存在着以下不⾜:
extern c的作用1. ⽆法出SQL语句的所有可能写法。很可能花费了⼤量的时间也⽆法到性能较佳的SQL语句。即便到了某个性能较佳的SQL语句也⽆法知道是否存在性能更好的写法。
2. ⾮常依赖于⼈的经验,经验的多寡往往决定了优化后SQL语句的性能。
3. ⾮常耗时间。重写-->校验正确性-->⽐较性能,这⼀循环过程需要⼤量的时间。
根据传统的SQL优化⼯具的功能,⼈们⼀般将优化⼯具分为以下三代产品:documents app
第⼀代的SQL优化⼯具是执⾏计划分析⼯具。这类⼯具对输⼊的SQL语句从数据库提取执⾏计划,并解释执⾏计划中关键字的含义。
第⼆代的SQL优化⼯具只能提供增加索引的建议,它通过对输⼊的SQL语句的执⾏计划的分析来产⽣是否要增加索引的建议。这类⼯具存在着致命的缺点——只分析了⼀条SQL语句就得出增加某个索引的结论,根本不理会(实际上也⽆法评估到)增加的索引对整体数据库系统性能的影响。
第三代⼯具是利⽤⼈⼯智能实现⾃动SQL优化。
⼈⼯智能⾃动SQL优化
随着⼈⼯智能技术的发展和在数据库优化领域应⽤的深⼊,在20世纪90年代末优化技术取得了突破性的进展,出现了⼈⼯智能⾃动SQL优化。⼈⼯智能⾃动SQL优化的本质就是借助⼈⼯智能技术,⾃动对SQL语句进⾏重写,到性能最好的等效SQL语句。LECCO SQL Expert就采⽤了这种⼈⼯智能技术,其SQL Expert⽀持Oracle、Sybase、MS SQL Server和IBM DB2数据库平台。其突出特点是⾃动优化SQL语句。除此以外,还可以以⼈⼯智能知识库“反馈式搜索引擎”来重写SQL语句,并出所有等效的SQL语句及可能的执⾏计划,通过测试运⾏为应⽤程序和数据库⾃动到性能最好的SQL语句,提供微秒级的计时; 能够优化Web应⽤程序和有⼤量⽤户的在线事务处理中运⾏时间很短的SQL语句; 能通过⽐较源SQL和待选SQL的不同之处,为开发⼈员提供“边做边学式训练”,迅速提⾼开发⼈员的SQL编程技能等等。
该⼯具针对数据库应⽤的开发和维护阶段提供了数个特别的模块:SQL语法优化器、PL/SQL集成化开发调试环境(IDE)、扫描器、数据库监视器等。其核⼼模块之⼀“SQL 语法优化器”的⼯作原理⼤致如下:输⼊⼀条源SQL语句,“⼈⼯智能反馈式搜索引擎”对输⼊的SQL 语句结合检测到的数据库结构和索引进⾏重写,产⽣N条等效的SQL语句输出,产⽣的N条等效SQL语句再送⼊“⼈⼯智能反馈式搜索引擎”进⾏重写,直⾄⽆法产⽣新的输出或搜索限额满,接下来对输出的SQL语句进⾏过滤,选出具有不同执⾏计划的SQL语句(不同的执⾏计划意味着不同的执⾏效率),最后,对得到的SQL语句进⾏批量
测试,出性能最好的SQL语句(参见下图)。
图 ⼈⼯智能⾃动SQL优化⽰意图
oracle10g日志文件路径LECCO SQL Expert不仅能够到最佳的SQL语句,它所提供的“边做边学式训练”还能够教会开发⼈员和数据库管理员如何写出性能最好的SQL语句。LECCO SQL Expert的SQL语句⾃动优化功能使SQL的优化变得极其简单,只要能够写出SQL语句,它就能帮开发⼈员到最好性能的写法。mysql面试题sql优化
⼩ 结
源码是什么格式的SQL语句是数据库应⽤中⼀个⾮常关键的部分,它执⾏性能的⾼低直接影响着应⽤程序的运⾏效率。正因为如此,⼈们在SQL语句的优化上投⼊了很⼤的精⼒,出现了许多SQL语句优化⼯具。随着⼈⼯智能等相关技术的⽇益成熟, 肯定还会有更多更好的⼯具出现,这将会给开发⼈员提供更多的帮助。
本⽂原创发布php中⽂⽹,转载请注明出处,感谢您的尊重!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论