当前位置:首页 > 日记 > 正文

MySQL数据库优化经验总结

MySQL数据库优化经验总结
1,选择最适用的字段属性
MySQL可以很好的支持大数据的访问,但一般来说,数据库中的表的更小,更快的查询将被执行它。因此,创建一个表时,为了获得更好的性能,我们可以设置字段的宽度表中尽可能小。例如,定义拉链代码字段时,如果将其设置为char(255),明显增加了不必要的空间数据库。即使使用varchar是不必要的。因为char(字符)可以很好的完成任务。以同样的方式,如果可以的话,我们应该使用MEDIUMINT代替大整数字段定义。
另一种提高效率的方法是尽可能地将字段设置为null,以便在将来执行查询时,数据库不需要比较null值。
对于某些文本字段,如省或性别,我们可以将它们定义为枚举类型。因为在MySQL中,枚举类型被视为数值数据和数值数据的处理比文字快得多。在这种方式中,我们也可以提高数据库的性能。

2。使用连接(join)来代替子查询(子查询)
MySQL支持SQL查询从4.1.this技术可以使用SELECT语句来创建一个列的查询结果,然后用这个结果作为过滤条件在另一个查询。例如,如果我们想删除那些在客户基本信息表没有订单的客户,我们可以使用子查询从销售信息表中提取所有客户的ID,然后把结果主查询。
删除的地方不在(选择CustomerInfo CustomerID CustomerID从salesinfo)
使用子查询可以完成许多同时需要逻辑上许多步骤的SQL操作。同时,它还可以避免交易或表锁定,也很容易写。然而,在某些情况下,子查询可以通过更有效的连接(join)取代..例如,假设我们要拿出所有的用户谁没有订单记录,你可以用下面的查询做:
SELECT * FROM customerinfo,CustomerID没有(选择CustomerID从salesinfo)
如果连接(join)来完成这个查询的速度要快得多。特别是,当salesinfo表索引到CustomerID,性能会更好,而且查询如下:
SELECT * FROM customerinfo左连接salesinfoon customerinfo CustomerID = salesinfo。在salesinfo.customerid CustomerID是空的
连接(连接)更高效,因为MySQL不需要在内存中创建临时表来完成逻辑两步查询。

三.使用工会(工会)取代人工创建的临时表
MySQL支持从4版本的联合查询,可以将两个或两个以上的选择要在查询中使用临时表的查询。在客户的查询会话结束时,临时表会自动删除,以确保数据库的整洁和有效。当我们使用联盟创建查询,我们只需要使用联盟作为一个关键字连接多个SELECT语句。我们应该注意所有SELECT语句中的字段数。
复制代码代码如下所示:
选择的名字,从客户会选择手机的名字,出生日期从作者
联盟
从产品中选择名称、供应商
4。
尽管我们可以使用子查询(子查询),加入(加入)和联盟(联盟)创建各种查询,不是所有的数据库操作就可以完成,只有一个或几个SQL语句。更多的时候,一系列的报表需要完成某项工作,但在这种情况下,整个块的操作变得不确定当一个块中的语句是错误的。想象一下,在同一时间内插入一个相关表的数据,可能会出现这样的情况:第一次成功更新表事故发生后情况突然出现在二表数据库,使操作没有完成,这将导致数据是不完整的,甚至会破坏数据库中的数据。为了避免这种情况,应该使用一个交易,它的功能是,每个语句的语句块操作成功或失败。换句话说,它可以保持数据库中数据的一致性和完整性。事情开始与开始的关键字,并提交关键词结束。之间的SQL操作失败,那么回滚命令可以恢复数据库状态之前的开始。
复制代码代码如下所示:
开始;
插入salesinfo集CustomerID = 14;
更新库存集数量= 11
在'book项目=;
承诺;

事务的另一个重要作用是,当多个用户同时使用同一个数据源时,它可以使用锁定数据库的方式为用户提供一种安全的访问方式,以确保用户的操作不受其他用户的干扰。

5。锁表
虽然交易是一个很好的方式来维护数据库的完整性,因为它的排他性,它有时会影响数据库的性能,特别是在大型应用系统,交易执行时,数据库将被锁定,这样其他用户的请求只能等到交易结束。如果数据库系统只有一个一些用户使用,不造成的交易已经成为一个大问题;但假设有成千上万的用户访问一个数据库系统数,比如访问一个电子商务网站,都会有一个延迟反应严重。
事实上,在某些情况下我们可以通过锁定表来获得更好的性能。
复制代码代码如下所示:
锁定表库存写入
从库存中选择数量
whereitem = 'book;

更新库存集数量= 11
whereitem = 'book;
打开表

在这里,我们用SELECT语句取出初始数据,并通过一些计算更新表中的新值。包含写关键字的锁表语句可以确保在执行解锁表命令之前没有其他插入、更新或删除清单的访问权限。

6。使用外键
锁定表的方法可以保持数据的完整性,但它不保证数据的关联性,我们可以在这个时候使用外键。例如,外键可以保证每一个销售记录指向一个现有的客户。在这里,外键可以地图在CustomerInfo表CustomerID CustomerID在salesinfo表。没有任何记录合法CustomerID将不会被更新或插入salesinfo。
复制代码代码如下所示:
创建表customerinfo

CustomerID int不空,
主键(ID)
类型= InnoDB);
创建表salesinfo

salesid INT NOT NULL,
CustomerID int不空,
主键(CustomerID,salesid),
外键(ID)引用customerinfo
(ID)在deletecascade
类型= InnoDB);

注意参数删除实例级。此参数可以确保在CustomerInfo表客户记录被删除,在salesinfo表客户相关的所有记录也会被自动删除。如果你想在MySQL中使用外键,一定要记住,表的类型定义为交易安全表InnoDB类型当你创建表。这类型不是MySQL表的默认类型。定义方法是添加型= InnoDB来创建表的语句。如图所示。

7。利用指数
索引是提高数据库性能的常用方法。它使数据库服务器比没有索引的索引更快地检索特定行。尤其是当查询语句包含max(),min()和订货指令,性能提高更为明显。这场应该被索引吗一般来说,该指标应根据这些字段将用于连接,在判断,和秩序。在一个有大量重复值的索引数据库没有现场试。一个枚举类型字段,很多重复的值很可能。例如,省…场customerinfo,不利于建立索引等领域。相反,它也可能会降低数据库的性能,我们可以在创建表的同时创建适当的索引,或者在以后使用索引表或创建索引来创建索引。

全文索引和搜索的支持从版本3.23.23.full文本索引在MySQL的全文型指标,但它只能用于一台MyISAM型。对于一个大的数据库,将数据加载到一个表没有索引,然后使用ALTER TABLE或创建创建索引,将是非常快的但如果将数据加载到表的全文索引,执行过程会很慢。

8。优化查询语句
在大多数情况下,使用索引可以提高查询速度,但如果SQL语句使用不当,指标并不能发挥其应有的作用。以下是应该注意的几个方面。首先,最好是比较领域的同一类型之间的操作。在MySQL 3.23版本,这甚至是一个必要条件。例如,我们不能比较索引的整数字段具有bigint场;然而,作为一个特殊的情况下,我们可以比较他们的时候,CHAR型和VARCHAR类型字段的字段大小是一样的。其次,尽量不要使用函数来对索引字段操作。

例如,当使用yeae()对日期型字段功能,索引不会起作用。所以,下面两个查询的结果是一样的,但前者比后者要快得多。
SELECT * FROM命令在年(订单)<2001;
SELECT * FROM订单,订单<2001-01-01 ;
计算数值字段时也会出现同样的情况:
从库存中选择* 24 / 7 <;
从清单中选择*,金额<24×7;
上述两个查询并返回相同的结果,但以下查询将比以前快多了。第三、搜索字符字段时,我们有时会使用类似关键字和通配符,这是简单的,但在系统性能为代价的。例如,下面的查询将比较每一个表中的记录。
从书中选择*
其中名为mysql
但是,如果更改下面的查询,返回结果是相同的,但是速度要快得多。
从书中选择*
其中名称> =MySQL,名字 最后,要注意避免MySQL在查询中的自动类型转换,因为转换过程也使索引不起作用。

相关文章

该kazaalite.exe过程kazaalite过程

该kazaalite.exe过程kazaalite过程

过程,什么用,电脑软件,kazaalite,exe,点评:kazaalite.exe是Kazaa的Kazaa Lite文件共享软件相关程序的简化版 进程文件:kazaalite或kazaalite.exe 进程名称:kazaalite 过程类别:安全风险的过程 英文描述: kazaalite.exe Kazaa Lite是主要的可执…

找到mysql的使用是很有用的。

找到mysql的使用是很有用的。

很有用,电脑软件,mysql,复制代码代码如下所示: 选择ABS(a.self_score-b.assess_score)值 形成一个emp_assess 内连接emp_assess_score B a.emp_assess_id = b.emp_assess_id限制不同…

修改QQ空间导航文字

修改QQ空间导航文字

导航,空间,修改,文字,电脑软件,效果如图所示。 首先要注意的是,自定义导航是不免费的黄色钻石可以自定义导航以上的文字! 方法如下: 首先,进入你自己的空间,然后进入购物中心。 右边的人物 个性导航…

klwtblfs.exe的过程是怎样的

klwtblfs.exe的过程是怎样的

的是,过程,是怎样,电脑软件,klwtblfs,评论:对klwtblfs.exe工艺简介 最近,有在过程管理klwtblfs.exe工艺文件的用户响应。那么什么是klwtblfs.exe的过程吗它可以关闭。这是小编辑的话题。 如果klwtblfs.exe过程可以在用户的计算机上,用户必须…

QQ空间日志审计问题探讨

QQ空间日志审计问题探讨

日志审计,空间,电脑软件,QQ,亲爱的客户您好,QQ空间一路前进,谢谢您的支持和配合,最近有少数用户在登录日志后发现并没有成功:退出,但日志正在审核中,或者需要通过审核的主动权才能上诉。我们可以理解,有些网友不理解或抱怨。QQ空间是一个大的互联…

PS如何给图形提供渐变颜色

PS如何给图形提供渐变颜色

图形,渐变,颜色,电脑软件,PS,如果需要对图形进行分级,我们可以使用ps中的渐变颜色,很多刚开始学习的初学者可能还不知道。这里是一个小编辑,他介绍了PS的内容,如何制作图形的层次。我们希望你能取得一些成就。 用ps改变图形颜色的一种方法 1…

在Excel2003对比两列快速找出相同

在Excel2003对比两列快速找出相同

数据,快速,电脑软件,在许多情况下,我们需要在excel表单中整理一些数据,特别是相同的数据。我们需要找出它并删除它。但是在两栏中,单元格的光线是很难分辨的,但也很苛刻,为什么不尝试用excel公式在自动分辨哪些是相同的数据呢有4种方法可以快速…

什么也不要安装Win8应用

什么也不要安装Win8应用

安装,电脑软件,点评:Windows8已经正式发布,Windows应用程序都可以让你的心找到了吗有些朋友可能无法适应这个商店的下载和应用模式。如果有问题,我们怎么解决如果Win8应用程序无法安装 1、当打开Windows8应用商店和安装Windows 8的应用程序,如…

mstore是mstore.exe-使用

mstore是mstore.exe-使用

电脑软件,mstore,exe,点评:mstore.exe是为Windows剪贴板管理更好地组织剪贴板内容的微软Office套件的一部分 进程文件:mstore或mstore.exe 过程名称:微软剪辑管理器 过程类别:安全风险的过程 英文描述: mstore.exe是一个过程,属于产品的微软Off…

传统BIOS教程安装Win8系统SteamOS

传统BIOS教程安装Win8系统SteamOS

系统,教程,安装,传统,电脑软件,点评:在Windows8.1平台SteamOS教程安装下,一个朋友看了文本的需要,与你分享 在发布新的SteamOS如何使传统BIOS的电脑变成游戏机立即,并下载新的SteamOS首次的镜子,它在win7安装Win8和Win8.1环境。新的SteamOS完全…

分析MySQL语法的兼容性(使用查询中

分析MySQL语法的兼容性(使用查询中

语法,查询,兼容性,电脑软件,MySQL,简单地说,查询中使用计数和更多字段。 复制代码代码如下所示: 从表中选择计数(id)、id和名称 真尴尬。我的环境是5.5。它可以得到结果,但不会运行到服务器。 好吧,犯一个错误。 复制代码代码如下所示: # 1140 -…

nerosvc是nerosvc.exe-使用

nerosvc是nerosvc.exe-使用

电脑软件,nerosvc,exe,点评:nerosvc.exe是尼禄的CD刻录软件相关程序 进程文件:nerosvc或nerosvc.exe 过程名称:尼禄安全服务 过程类别:安全风险的过程 英文描述: nerosvc.exe是与尼禄光盘刻录软件相关的过程,CD,它也被称为以下三个方面。 中文参…