1)写入操作优先于读取操作 。
2)对某张数据表的写入操作某一时刻只能发生一次,写入请求按照它们到达的次序来处理 。
3)对某张数据表的多个读取操作可以同时地进行 。MySQL 提供了几个语句调节符,允许你修改它的调度策略:
- LOW_PRIORITY关键字应用于DELETE、INSERT、LOAD DATA、REPLACE和UPDATE;
- HIGH_PRIORITY关键字应用于SELECT和INSERT语句;
- DELAYED关键字应用于INSERT和REPLACE语句 。
SELECT 查询的HIGH_PRIORITY(高优先级)关键字也类似 。它允许SELECT 插入正在等待的写入操作之前,即使在正常情况下写入操作的优先级更高 。另外一种影响是,高优先级的 SELECT 在正常的 SELECT 语句之前执行,因为这些语句会被写入操作阻塞 。如果希望所有支持LOW_PRIORITY 选项的语句都默认地按照低优先级来处理,那么 请使用--low-priority-updates 选项来启动服务器 。通过使用 INSERTHIGH_PRIORITY 来把 INSERT 语句提高到正常的写入优先级,可以消除该选项对单个INSERT语句的影响 。
四、查询条件优化1. 对于复杂的查询,可以使用中间临时表 暂存数据;
2. 优化group by语句
默认情况下,MySQL 会对GROUP BY分组的所有值进行排序,如 “GROUP BY col1,col2,....;” 查询的方法如同在查询中指定 “ORDER BY col1,col2,...;” 如果显式包括一个包含相同的列的 ORDER BY子句,MySQL 可以毫不减速地对它进行优化,尽管仍然进行排序 。
因此,如果查询包括 GROUP BY 但你并不想对分组的值进行排序,你可以指定 ORDER BY NULL禁止排序 。例如:
SELECT col1, col2, COUNT(*) FROM table GROUP BY col1, col2 ORDER BY NULL ;3. 优化join语句MySQL中可以通过子查询来使用 SELECT 语句来创建一个单列的查询结果,然后把这个结果作为过滤条件用在另一个查询中 。使用子查询可以一次性的完成很多逻辑上需要多个步骤才能完成的 SQL 操作,同时也可以避免事务或者表锁死,并且写起来也很容易 。但是,有些情况下,子查询可以被更有效率的连接(JOIN)..替代 。
例子:假设要将所有没有订单记录的用户取出来,可以用下面这个查询完成:
SELECT col1 FROM customerinfo WHERE CustomerID NOT in (SELECT CustomerID FROM salesinfo )如果使用连接(JOIN).. 来完成这个查询工作,速度将会有所提升 。尤其是当 salesinfo表中对 CustomerID 建有索引的话,性能将会更好,查询如下:SELECT col1 FROM customerinfo LEFT JOIN salesinfoON customerinfo.CustomerID=salesinfo.CustomerID WHERE salesinfo.CustomerID IS NULL 连接(JOIN).. 之所以更有效率一些,是因为 MySQL 不需要在内存中创建临时表来完成这个逻辑上的需要两个步骤的查询工作 。4. 优化union查询
MySQL通过创建并填充临时表的方式来执行union查询 。除非确实要消除重复的行,否则建议使用union all 。原因在于如果没有all这个关键词,MySQL会给临时表加上distinct选项,这会导致对整个临时表的数据做唯一性校验,这样做的消耗相当高 。
高效:
SELECT COL1, COL2, COL3 FROM TABLE WHERE COL1 = 10 UNION ALL SELECT COL1, COL2, COL3 FROM TABLE WHERE COL3= 'TEST'; 低效:SELECT COL1, COL2, COL3 FROM TABLE WHERE COL1 = 10 UNION SELECT COL1, COL2, COL3 FROM TABLE WHERE COL3= 'TEST';5.拆分复杂SQL为多个小SQL,避免大事务简单的SQL容易使用到MySQL的QUERY CACHE;
减少锁表时间特别是使用MyISAM存储引擎的表;
可以使用多核CPU 。
6. 使用truncate代替delete
当删除全表中记录时,使用delete语句的操作会被记录到undo块中,删除记录也记录binlog,当确认需要删除全表时,会产生很大量的binlog并占用大量的undo数据块,此时既没有很好的效率也占用了大量的资源 。
使用truncate替代,不会记录可恢复的信息,数据不能被恢复 。也因此使用truncate操作有其极少的资源占用与极快的时间 。另外,使用truncate可以回收表的水位,使自增字段值归零 。
推荐阅读
- 补肾精最好的味中药,养肾的茶有哪些
- 什么方法减肥最快还有效果,喝什么花茶减肥效果最快最好
- 如何用Python输出数学公式?
- Linux上,最常用的十条命令
- 最贵的祁门红茶多少钱斤,祁门红茶的特点
- 公认最好喝的十大果茶,你们喝过最好喝的绿茶是什么
- 普洱茶厂家最新排名,还有染色普洱茶
- 什么食物最刮油减肥,什么茶刮油减肥最有效
- 男人喝杜仲雄花壮阳吗,男人喝什么花茶最壮阳
- 干的雪莲花怎么吃最好,干桂花怎么吃最好
