MYSQL教程:查询优化之调度和锁定
来源:asp之家 发布时间:2009-02-27 15:58:00
调度和锁定
在很多客户一起查询数据表时,如果使客户能最快地查询到数据就是调度和锁定做的工作了。在MySQL中,我们把select操作叫做读,把对数据表修改增加的操作(INSERT,UPDATE,REPLACE...)叫做写。MySQL的基本调度策略可以归纳为以下两条:
写入请求将按它们到达服务器的顺序进行处理;
写操作的优先级要高于读操作。
MyISAM和ISAM数据表的调度策略是在数据表锁的帮助下实现的,在客户程序要访问数据表之前,需获得相应的锁,在完成对数据表的操作后,再释放该锁。锁的管理通常由服务器管理,也可人为地用LOCK TABLES和UNLOCK TABLES命令来申请和释放锁。写操作时,需要申请一个独占性的锁,也就是说在写操作其间,该表只能由写操作的客户使用。读操作时,客户必须申请一个允许其他客户对数据表进行写操作的锁,以确保客户在读的过程中数据表不会发生改变。但读操作锁不是独占的,可有多个读操作同时作用于同一个数据表。
通过一些修饰符可影响调度策略,如LOW_PRIORITY(用于DELETE,INSERT,LOAD DATA,REPLACE,UPDATE语句)、HIGH_PRIORITY(用于SELECT语句)、DELAYED(用于INSERT和REPLACE语句)。它们的作用是这样的:
LOW_PRIORITY会使写操作的优先级降低到读操作以下,也就是说读操作会阻塞该级别的写操作,SELECT的HIGH_PRIORITY有类似的作用。
INSERT语句中的DELAYED修饰会使插入操作被放入一个“延迟插入”队列。并返回状态信息给客户,使客户程序可在新数据行还没插入到数据表之前继续执行后面的操作。如果一直有客户读该数据表,新数据行会一直待在队列中,直到数据表没有读操作时,服务器才会把队列中的数据行真正插入到数据表中。该语句可用在以下场合,在一个有冗长查询的数据表中插入数据,而你又不想被阻塞,你就可发出INSERT DELAYED语句,把插入操作放入服务器“延迟插入”队列,你无需等待就马上可进行接下来的操作。
当一个数据表里从未进行过删除操作或刚刚对它进行过碎片整理的情况下,用INSERT语句插入的数据行只会被添加到数据表的末尾,而不会插入到数据表的中间位置。这样,对于MyISAM表,MySQL允许在有其它客户正在读操作的时间进行写操作。我们称之这并发插入。要使用该技巧,需注意以下两个问题:
不要在INSERT语句中使用LOW_PRIORITY修饰符。
读操作应用LOCK TABLES ... READ LOCAL而不是用LOCK TABLES ... READ语句来进行数据表读锁定。LOCAL关键字只对数据表中已存在行进行锁定,不会阻塞把新行添加到数据表末尾。
BDB数据表使用页面级操作锁,InnoDB数据表使用数据行级操作锁。所以这两种表的并发性比MyISAM和ISAM数据表这种表级锁的并发性会好很多。其中InnoDB的并发性最好。综上所述,我们可得出以下结论:
MyISAM和ISAM数据表的检索速度最快,但如果在检索和修改操作较多的场合,会出锁竞争的问题,造成等待时间延长。
BDB和InnoDB数据表能在有大量修改操作的环境下提供很好的并发性,从而提供更好的性能。
MyISAM和ISAM数据表由于进行表级锁定,所以不会出现死锁现象,BDB和InnoDB数据表则存在死锁的可能性。


猜你喜欢
- 一). ubuntu下mysql安装布局:/usr/bin  
- <?php $fp = fopen("http://www.***.com/**
- 以下摘录自 oreilly.JavaScript.The.Definitive.Guide.5th.Edition.Aug.200
- 利用Python中的socket模块中的来实现UDP协议,这里写一个简单的服务器和客户端。为了说明网络编程中UDP的应用,这里就不写图形化了
- 在做接口自动化的时候,请求数据之前都是JSON格式的,Python有自带的包来解决。最近在做APP的接口,遇到XML格式的请求数据,费了很大
- 1、简介 with是从Python2.5引入的一个新的语法,它是一种上下文管理协议,目的
- 一、前言本篇博客对于文件操作、字典、列表、匿名函数以及sort()等内置函数进行了系统的整理操作,以设计一个学生信息管理系统的形式展示,具体
- 这个效果用的很频繁,经常都会有人问我这个问题,所以要把它写成文章。下次再有人问就直接把这篇文章的URL丢出去就好了。这个效果很简单所以我就不
- 当代码已经写得差不多,发现某个变量名需要修改,但代码中很多地方都有该变量,一一修改太麻烦了,在不同的情景下,可以采取更加简便的方法,如下介绍
- 一、题目要求用原生Python实现knn分类算法。二、题目分析数据来源:鸢尾花数据集(见附录Iris.txt)数据集包含150个数据集,分为
- create or replace PROCEDURE proceudre_name AS BEGIN DECLARE sPara VARC
- 本文实例为大家分享了windows下mysql 8.0.12安装步骤及使用教程,供大家参考,具体内容如下1.到官网下载下载SQL。(1.1)
- 今天用vue来实现一个分页组件,总体来说,vue实现比较简单,样式部分模仿了elementUI。所有代码的源码可以再github上下载的到:
- lambda/filter/map/reduce这几个函数面试中很肯定会用到,本篇主要介绍这几个函数的用法。1 lambda匿名函数,用法如
- 使用MySQL的命令终端时,如果输入SQL有误,将有beep声。若要关闭该功能,根据mysql --help,使用mysql --no-be
- 前言数据分析就是将数据以各种图表的形式展现给领导,供领导做决策用,因此熟练掌握饼图、柱状图、线图等图表制作是一个数据分析师必备的技能。Pyt
- Jaspersoft Studio添加数据库配置可以解决报表字段较多,手动添加效率低的问题。添加数据库配置,笔者这里以 mysql 为例,步
- 本文实例讲述了MySQL 表数据的导入导出操作。分享给大家供大家参考,具体如下:数据导出1. 使用 SELECT ..
- 本文实例讲述了Python基于回溯法子集树模板实现图的遍历功能。分享给大家供大家参考,具体如下:问题一个图:A --> BA --&g
- 今天重新研究了下VB里面的ScriptControl组件,发现asp里面也能调用。研究了下方法,后来和lcx讨论了下。得到了如下代码,在此感