论文中如何写mysql的介绍_mysql优化写论文,从哪几方面入手啊解决方法

引用

第7章:优化

目录

7.1. 优化概述

7.1.1. MySQL设计局限与折衷

7.1.2. 为可移植性设计应用程序

7.1.3. 我们已将MySQL用在何处?

7.1.4. MySQL基准套件

7.1.5. 使用自己的基准

7.2. 优化SELECT语句和其它查询

7.2.1. EXPLAIN语法(获取SELECT相关信息)

7.2.2. 估计查询性能

7.2.3. SELECT查询的速度

7.2.4. MySQL怎样优化WHERE子句

7.2.5. 范围优化

7.2.6. 索引合并优化

7.2.7. MySQL如何优化IS NULL

7.2.8. MySQL如何优化DISTINCT

7.2.9. MySQL如何优化LEFT JOIN和RIGHT JOIN

7.2.10. MySQL如何优化嵌套Join

7.2.11. MySQL如何简化外部联合

7.2.12. MySQL如何优化ORDER BY

7.2.13. MySQL如何优化GROUP BY

7.2.14. MySQL如何优化LIMIT

7.2.15. 如何避免表扫描

7.2.16. INSERT语句的速度

7.2.17. UPDATE语句的速度

7.2.18. DELETE语句的速度

7.2.19. 其它优化技巧

7.3. 锁定事宜

7.3.1. 锁定方法

7.3.2. 表锁定事宜

7.4. 优化数据库结构

7.4.1. 设计选择

7.4.2. 使你的数据尽可能小

7.4.3. 列索引

7.4.4. 多列索引

7.4.5. MySQL如何使用索引

7.4.6. MyISAM键高速缓冲

7.4.7. MyISAM索引统计集合

7.4.8. MySQL如何计算打开的表

7.4.9. MySQL如何打开和关闭表

7.4.10. 在同一个数据库中创建多个表的缺陷

7.5. 优化MySQL服务器

7.5.1. 系统因素和启动参数的调节

7.5.2. 调节服务器参数

7.5.3. 控制查询优化器的性能

7.5.4. 编译和链接怎样影响MySQL的速度

7.5.5. MySQL如何使用内存

7.5.6. MySQL如何使用DNS

7.6. 磁盘事宜

7.6.1. 使用符号链接

优化是一个复杂的任务,因为最终要求了解整个待优化的系统。尽管可以进行局部优化而不需要了解系统或应用程序,为了优化得更好,你必须知道更多的信息。

本章解释并给出不同的优化MySQL的方法示例。但要记住总有一些其它方法使系统更快,尽管需要更多的工作。

7.1. 优化概述

7.1.1. MySQL设计局限与折衷

7.1.2. 为可移植性设计应用程序

7.1.3. 我们已将MySQL用在何处?

7.1.4. MySQL基准套件

7.1.5. 使用自己的基准

使一个系统更快的最重要因素当然是基本设计。此外,还需要知道系统正做什么样的事情,以及瓶颈是什么。

最常见的系统瓶颈是:

磁盘搜索。需要花时间从磁盘上找到一个数据,用在现代磁盘的平均时间通常小于10ms,因此理论上我们能够每秒大约搜索1000次。这个时间在新磁盘上提高不大并且很难为一个表进行优化。优化它的方法是将数据分布在多个磁盘上。

磁盘读/写。当磁盘放入正确位置后,我们需要从中读取数据。对于现代的磁盘,一个磁盘至少传输10-20Mb/s的吞吐。这比搜索要容易优化,因为你能从多个磁盘并行地读。

CPU周期。我们将数据读入内存后,需要对它进行处理以获得我们需要的结果。表相对于内存较小是最常见的限制因素。但是对于小表,速度通常不成问题。

· 内存带宽。当CPU需要的数据超出CPU缓存时,主缓存带宽就成为内存的一个瓶颈。这在大多数系统正是一个不常见的瓶颈但是你应该知道它。

7.1.1. MySQL设计局限与折衷

当使用MyISAM存储引擎时,MySQL使用极快速的表锁定,以便允许多次读或一次写。使用该存储引擎的最大问题出现在同一个表中进行混合稳定数据流更新与慢速选择。如果这只是某些表的问题,你可以使用另一个存储引擎。参见第15章:存储引擎和表类型。

MySQL可以使用事务表和非事务表。为了更容易地让非事务表顺利工作(如果出现问题不能回滚),MySQL采用下述规则。请注意这些规则只适用于不运行在严格模式下或为INSERT或UPDATE使用IGNORE规定程序时。

· 所有列有默认值。请注意当运行在严格SQL模式(包括TRADITIONAL SQL模式)时,必须为NOT NULL列指定默认值。

· 如果向列内插入不合适的或超出范围的值,MySQL将该列设定为“最好的可能的值”,而不是报告错误。对于数字值,为0、可能的最小值或最大值。对于字符串,为空字符串或列内可以保存的字符串。请注意当运行在严格模式或TRADITIONAL SQL模式时该行为不 适用。

· 所有表达式的计算结果返回一个表示错误状况的信号。例如,1/0返回NULL。(使用ERROR_FOR_DIVISION_BY_ZERO SQL模式可以更改该行为)。

如果正使用非事务表,不应该使用MySQL来检查列的内容。一般情况,最安全的(通常是最快的)方法径是让应用程序确保只向数据库传递合法值。

相关详细信息参见1.8.6节,“MySQL处理约束的方式”和13.2.4节,“INSERT语法”或5.3.2节,“SQL服务器模式”。

7.1.2. 为可移植性设计应用程序

因为不同SQL服务器实现了标准SQL的不同部分,需要花功夫来编写可移植的SQL应用程序。对很简单的选择/插入,很容易实现移植,但是需要的功能越多则越困难。如果想要应用程序对很多数据库系统都快,它变得更难!

为了使一个复杂应用程序可移植,你需要选择它应该工作的SQL服务器,并确定这些服务器支持什么特性。

所有数据库都有一些弱点。这就是它们不同的设计折衷导致的不同行为。

可以使用MySQL的crash-me程序来找出能用于数据库服务器选择的函数、类型和限制。crash-me并不能找出所有的特性,但是其广度仍然很合理,可以进行大约450个测试。

crash-me可以提供的一种类型的信息的例子:如果想要使用Informix或DB2,不应该使用超过18个字符的列名。

crash-me程序和MySQL基准程序是独立于数据库的。通过观察它们是如何编写的,编可以知道必须为编写独立于数据库的应用程序做什么。基准本身可在MySQL源码分发的“sql-bench”目录下找到。它们用DBI数据库接口以Perl写成。使用DBI本身即可以解决部分移植性问题,因为它提供与数据库无关的的存取方法。

如果你为数据库的独立性而努力,需要很好地了解每个SQL服务器的瓶颈。例如,MySQL在检索和更新MyISAM表记录方面很快,但是在同一个表上混合慢速读者和写者方面有一个问题。另一方面,当你试图访问最近更新了(直到它们被刷新到磁盘上)的行时,在Oracle中有一个很大的问题。事务数据库总的来说在从记录文件表中生成总结表方面不是很好,因为在这种情况下,行锁定几乎没有用。

为了使应用程序“确实”独立于数据库,需要定义一个容易扩展的接口,用它可操纵数据。因为C++在大多数系统上可以适用,使用数据库的一个C++ 类接口是有意义的。

如果你使用某个数据库特定的功能(例如MySQL

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/574417.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何理解java回电话

同android中间Button的setOnClickListener这个回调案例; Button button (Button)this.findViewById(R.id.button); button.setOnClickListener(new Button.OnClickListener() {//回调函数overridepublicvoid onClick(View v) {buttonTextView.setText("按钮被…

python mysql 时间比较大小_python时间函数与mysql时间函数转换

时间相关操作,时间有三种表示方式:时间戳 1970年1月1日之后的秒,即:time.time()格式化的字符串 2014-11-11 11:11, 即:time.strftime(%Y-%m-%d)结构化时间 元组包含了&#x…

springMVC 前后台日期格式传值解决方式之二(共二) @InitBinder的使用

关于springmvc日期问题的解决方式 除了本博客的【springMVC 前后台日期格式传值解决方式之 DateTimeFormat的使用和配置】一文, 还有如下这种方式: 在Controller里加上这段代码: 1 InitBinder2 public void initBinder(ServletRequestDataBinder…

mysql npe问题_MySQL为Null会导致5个问题,个个致命!

本文转载自微信公众号「Java中文社群」,作者磊哥。转载本文请联系Java中文社群公众号。正式开始之前,我们先来看下 MySQL 服务器的配置和版本号信息,如下图所示:“兵马未动粮草先行”,看完了相关的配置之后&#xff0c…

line-height 与垂直居中!

在此之前,对于line-height 与垂直居中的问题,经常碰到。 比如,图片与span在同一个box中的时候,竟然会各种偏移。要想达到理想的效果真的是各种难。 有时间,决定认真的啃一啃。 一 line-heigtht: 1. line-height: 顾名…

暑假集训-个人赛第六场

这场比赛,不提也罢。 A转载于:https://www.cnblogs.com/macinchang/p/4693690.html

mysql优化插入速度的方法_优化MySQL插入方法的五个妙招

以下是涉及到插入表格的查询的5种改进方法:1)使用LOAD DATA INFILE从文本下载数据这将比使用插入语句快20倍。2)使用带有多个VALUES列表的INSERT语句一次插入几行这将比使用一个单行插入语句快几倍。调整bulk_insert_buffer_size变量也能提高(向包含行的表格中)插入…

数据结构导论(一)

导读:在看书前,我对这本书的内容,是 这么想的:数据结构,那大概就是关于数据和结构的东西。而讲到数据,估计会说到数据类型,数据定义,数据存储等方面。然后在结构方面,就不…

基于java的汽车维修保养智能预约系统论文

摘 要 信息数据从传统到当代,是一直在变革当中,突如其来的互联网让传统的信息管理看到了革命性的曙光,因为传统信息管理从时效性,还是安全性,还是可操作性等各个方面来讲,遇到了互联网时代才发现能补上自古…

mysql无法添加或更新子行_MySQL错误1452-无法添加或更新子行:外键约束失败?

每当我们在表之间添加外键约束并将记录插入子表中时,都会发生此错误。让我们来看一个例子。创建子表。mysql> create table ChildDemo-> (-> id int,-> FKPK int-> );创建第二个表。mysql> create table ParentDemo-> (-> FKPK int,-> N…

YIi2中checkboxOptions前选框的用法

这是checkboxOptions前选框的用法 use yii\grid\GridView; $this->registerJs(" $(#selection_all).click(function(){ $(input[nameselection_all]).click(); }); $(#delete_select).click(function(){ var selection $(#w0).yiiGridView(getSelectedRows); if(selec…

python顺序执行 toggle_pythonkivymd:如何使toggle_nav_drawer()函数工作?

我的kv代码有问题。我想用几个NavigationDrawerIconButtons创建一个MDNavigationDrawer。窗口会出现,但当我单击MDToolbar时,程序崩溃并显示此错误消息。在Traceback (most recent call last):File "C:/Users/path/to/my/file/main.py", line …

Angularjs+Nodejs图片上传

1.插件 (1) &#xff1a;angular插件 ng-file-upload (2) : nodejs插件connect-multiparty 2.html <input type"file" ngf-select ng-model"files" ngf-multiple"true" /> 3.配置 var app angular.module(fileUpload, [ngFileUpload]);可…

mysql 日志同步 数据不同步_Mysql互为主从问题--日志同步数据不同步

Mysql互为主从问题--日志同步数据不同步我搭建的是mysql互为主从 复制两台机器的mysql环境完全相同第一部分测试&#xff1a;B为master A为slave的同步测试在B上创建表lian&#xff0c;并插入数据mysql> create table lian (a int,b char(10));mysql> insert into lian (…

UVALive 4764 dp

DES: 这是一个新的游戏。给你一套牌、编号从1到100000.正常来说。你手中的牌和这次翻的牌是一样的&#xff0c;就会加一分。但是。如果是999的话。加三分。所以问你最大的分是多少。 貌似是简单的DP吧。&#xff08;DP菜鸟...再简单我也不会...T_T...&#xff09;于是...我看懂…

mysql数据库事务命令_MySql学习18----数据库事务---命令使用(02)

本篇讲述数据库中非常重要的事务概念和如何使用MySQL命令行窗口来进行数据库的事务操作。下一篇会讲述如何使用JDBC进行数据库的事务操作。事务是指数据库中的一组逻辑操作&#xff0c;这个操作的特点就是在该组逻辑中&#xff0c;所有的操作要么全部成功&#xff0c;要么全部失…

iOS 高效 Mac 配置

https://testerhome.com/topics/3045 https://support.apple.com/zh-cn/HT201236转载于:https://www.cnblogs.com/mobilefeng/p/4701469.html

壁式框架内力计算_剪力墙结构设计计算要点和实例

剪力墙计算第5章剪力墙结构设计本章主要内容&#xff1a;5.1概述结构布置剪力墙的分类剪力墙的分析方法5.2整体剪力墙和整体小开口剪力墙的计算整体剪力墙的计算整体小开口剪力墙的计算5.3联肢剪力墙的计算双肢剪力墙的计算多肢墙的计算5.4壁式框架的计算计算简图内力计算位移的…

Linux删除文件夹命令

Linux删除文件夹命令 linux删除目录很简单&#xff0c;很多人还是习惯用rmdir&#xff0c;不过一旦目录非空&#xff0c;就陷入深深的苦恼之中&#xff0c;现在使用rm -rf命令即可。直接rm就可以了&#xff0c;不过要加两个参数-rf 即&#xff1a;rm -rf 目录名字 删除目录、文…

concat合并的数组会有顺序么_javascript concat 数组与数组或数组与字符串的合并

concat 方法将传入的数组或非数组值与原数组合并,组成一个新的数组并返回.concat()基本语法&#xff1a;array.concat(value1, value2, ..., valueN)concat()参数说明&#xff1a;参数名参数说明array原数组value1, value2, ..., valueN需要与原数组合并的数组或非数组值.conca…