`

HIGH_PRIORITY/LOW_PRIORITY/INSERT DELAYED

 
阅读更多
MySQL 还允许改变语句调度的优先级,它可以使来自多个客户端的查询更好地协作,这样单个客户端就不会由于锁定而等待很长时间。改变优先级还可以确保特定类型的查询被处理得更快。

我们首先应该确定应用的类型,判断应用是以查询为主还是以更新为主的,是确保查询效率还是确保更新的效率,决定是查询优先还是更新优先。

下面我们提到的改变调度策略的方法主要是针对 MyISAM 存储引擎的,对于 InnoDB 存储引擎,语句的执行是由获得行锁的顺序决定的。

MySQL 的默认的调度策略可用总结如下:

写入操作优先于读取操作。
对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。
对某张数据表的多个读取操作可以同时地进行。
MySQL 提供了几个语句调节符,允许你修改它的调度策略:

LOW_PRIORITY 关键字应用于 DELETE 、 INSERT 、 LOAD DATA 、 REPLACE 和 UPDATE 。
HIGH_PRIORITY 关键字应用于 SELECT 和 INSERT 语句。
DELAYED 关键字应用于 INSERT 和 REPLACE 语句。
如果写入操作是一个 LOW_PRIORITY (低优先级)请求,那么系统就不会认为它的优先级高于读取操作。在这种情况下,如果写入者在等待的时候,第二个读取者到达了,那么就允许第二个读取者插到写入者之前。只有在没有其它的读取者的时候,才允许写入者开始操作。这种调度修改可能存在 LOW_PRIORITY 写入操作永远被阻塞的情况。

SELECT 查询的 HIGH_PRIORITY (高优先级)关键字也类似。它允许 SELECT 插入正在等待的写入操作之前,即使在正常情况下写入操作的优先级更高。另外一种影响是,高优先级的 SELECT 在正常的 SELECT 语句之前执行,因为这些语句会被写入操作阻塞。

如果你希望所有支持 LOW_PRIORITY 选项的语句都默认地按照低优先级来处理,那么请使用 --low-priority-updates 选项来启动服务器。通过使用 INSERT HIGH_PRIORITY 来把 INSERT 语句提高到正常的写入优先级,可以消除该选项对单个 INSERT 语句的影响。
分享到:
评论

相关推荐

    TDSQL分布式实例开发与编程指南(1).pdf

    * 暂不支持SQL中使用DELAYED和LOW_PRIORITY * 暂不支持SQL中对于变量的引用和操作,比如 SET =1, =; SELECT , @@c@d @c+1@c * 暂不支持index_hint * 暂不支持HANDLER/DO管理SQL语 * 暂不支持ANALYZE/CHECK/CHECKSUM/...

    mysql insert语句操作实例讲解

    `LOW_PRIORITY`、`DELAYED`和`HIGH_PRIORITY`选项可以改变INSERT语句的执行优先级。例如,`LOW_PRIORITY`允许其他查询在插入操作之前执行。 10. **多行INSERT**: 你可以一次性插入多行数据,只要所有行有相同的...

    浅析mysql 语句的调度优先级及改变

    MySQL的默认的调度策略可用总结如下:· 写入操作优先于读取操作。· 对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理。· 对某张数据表的多个读取...LOW_PRIORITY和HIGH_PRIORITY调

    MySQL小技巧

    INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},...),(...),... [ ON DUPLICATE KEY UPDATE col_name=expr, ... ] ``` 其中,`tbl_name`...

    mysql insert的几点操作(DELAYED,IGNORE,ON DUPLICATE KEY UPDATE )

    INSERT语法 INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] [INTO] tbl_name [(col_name,…)] VALUES ({expr | DEFAULT},…),(…),… [ ON DUPLICATE KEY UPDATE col_name=expr, … ] 或: INSERT [LOW_...

    解析SQL语句中Replace INTO与INSERT INTO的不同之处

    请注意,`LOW_PRIORITY` 和 `DELAYED` 选项可以用于控制插入的优先级,但这些在 `REPLACE INTO` 中并不常见。此外,目前无法在一个子查询中同时对同一表进行 `REPLACE INTO` 和 `SELECT` 操作。 总结来说,`INSERT ...

    正确使用MySQL INSERT INTO语句

    INSERT [LOW_PRIORITY | DELAYED] [IGNORE] [INTO] tbl_name [(col_name,...)] VALUES (expression,...),(...),... MySQLINSERT INTO SELECT语句: INSERT [LOW_PRIORITY | DELAYED] [IGNORE]

    分享MYSQL插入数据时忽略重复数据的方法

    INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] INTO tbl_name [(col_name,...)] VALUES (value,...), ... ``` 或者 ```sql INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE] INTO tbl_name...

    MYSQL中常用的强制性操作(例如强制索引)

    `INSERT DELAYED`允许客户端提交数据,但不立即写入表中,而是存储在内存中等待合适时机插入,适合大量并发插入的情况: ```sql INSERT DELAYED INTO table1 set field1= … ``` 8. **强制连接顺序(STRAIGHT_...

    MySQL replace into 用法.txt

    REPLACE [LOW_PRIORITY|DELAYED] [INTO] tbl_name [(col_name, ...)] VALUES (expr | DEFAULT, ...); ``` 这里 `tbl_name` 表示表名,`col_name` 表示列名,`expr` 表示表达式或值。 - **使用 SET 语句格式**: ...

    MySQL Replace INTO的使用

    `LOW_PRIORITY`和`DELAYED`选项在某些情况下可延迟插入,等待其他读操作完成,但这在`REPLACE INTO`中并不常用。 总结来说,`REPLACE INTO`是MySQL提供的一种处理数据唯一性冲突的策略,它在发现冲突时删除旧记录并...

    MySQL中REPLACE INTO和INSERT INTO的区别分析

    - `REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name [(col_name,...)] VALUES ({expr | DEFAULT},…),(…),…` - `REPLACE [LOW_PRIORITY | DELAYED] [INTO] tbl_name SET col_name={expr | DEFAULT}, …` - `...

    MySQL从入门到精通管理自己的数据.pdf

    有几种变体,如`LOW_PRIORITY`允许其他高优先级操作先执行,`DELAYED`允许插入操作延迟,`IGNORE`则忽略插入时的主键冲突。 2. **UPDATE语句**:用于修改已存在记录的数据。例如,如果我们想更新部门ID为1001的...

    MySQL 大数据量快速插入方法和语句优化分享

    其中,`LOW_PRIORITY`、`DELAYED`和`HIGH_PRIORITY`等修饰符可以控制插入操作的优先级。`DELAYED`选项允许服务器将插入请求放入队列,先返回结果给客户端,然后在适当的时候异步执行插入,这样可以避免阻塞其他读取...

    SQL语言的使用-数据库和表.doc

    此外,`LOW PRIORITY`、`DELAYED`、`HIGH_PRIORITY`和`IGNORE`这些选项可以调整插入操作的优先级和错误处理方式。`VALUES`关键字用于指定要插入的值,`SET`关键字常用于更新已有记录的值。 总的来说,理解和熟练...

Global site tag (gtag.js) - Google Analytics