`

【mysql】mysql优化与执行(hint和explain)

阅读更多

一。explain请求优化器解释优化过程的各个要素

mysql> expLain select * from basic_info where car_code like "京%"\G

*************************** 1. row ***************************

           id: 1

  select_type: SIMPLE

        table: basic_info

   partitions: NULL

         type: range

possible_keys: car_code

          key: car_code

      key_len: 153

          ref: NULL

         rows: 1

     filtered: 100.00

        Extra: Using index condition

1 row in set, 1 warning (0.00 sec)

 

二。通过特殊的关键字提示优化器,影响它的决策过程

1、强制索引 FORCE INDEX

SELECT * FROM TABLE1 FORCE INDEX (FIELD1) …

以上的SQL语句只使用建立在FIELD1上的索引,而不使用其它字段上的索引。

2、忽略索引 IGNORE INDEX

SELECT * FROM TABLE1 IGNORE INDEX (FIELD1, FIELD2) …

在上面的SQL语句中,TABLE1表中FIELD1和FIELD2上的索引不被使用。

3、关闭查询缓冲 SQL_NO_CACHE

SELECT SQL_NO_CACHE field1, field2 FROM TABLE1;

有一些SQL语句需要实时地查询数据,或者并不经常使用(可能一天就执行一两次),这样就需要把缓冲关了,不管这条SQL语句是否被执行过,服务器都不会在缓冲区中查找,每次都会执行它。

4、强制查询缓冲 SQL_CACHE

SELECT SQL_CACHE * FROM TABLE1;

如果在my.ini中的query_cache_type设成2,这样只有在使用了SQL_CACHE后,才使用查询缓冲。

5、优先操作 HIGH_PRIORITY

HIGH_PRIORITY可以使用在select和insert操作中,让MYSQL知道,这个操作优先进行。

SELECT HIGH_PRIORITY * FROM TABLE1;

6、滞后操作 LOW_PRIORITY

LOW_PRIORITY可以使用在insert和update操作中,让mysql知道,这个操作滞后。

update LOW_PRIORITY table1 set field1= where field1= …

7、延时插入 INSERT DELAYED

INSERT DELAYED INTO table1 set field1= …

INSERT DELAYED INTO,是客户端提交数据给MySQL,MySQL返回OK状态给客户端。而这是并不是已经将数据插入表,而是存储在内存里面等待排队。当mysql有空余时,再插入。另一个重要的好处是,来自许多客户端的插入被集中在一起,并被编写入一个块。这比执行许多独立的插入要快很多。坏处是,不能返回自动递增 的ID,以及系统崩溃时,MySQL还没有来得及插入数据的话,这些数据将会丢失。

8、强制链接顺序 STRAIGHT_JOIN

SLECT TABLE1.* FROM TABLE1 STRAIGHT_JOIN TABLE2 WHERE ...

通过hint强制按 TABLE1/TABLE2顺序连接表

9、强制使用临时表 SQL_BUFFER_RESULT

SELECT SQL_BUFFER_RESULT * FROM tbale1

当查询结果集数据比较多时,可以通过SQL_BUFFER_RESULT 强制结果集放到临时表中

--------------------- 

作者:Two手揣兜 

来源:CSDN 

原文:https://blog.csdn.net/u013820054/article/details/52159998 

版权声明:本文为博主原创文章,转载请附上博文链接!

分享到:
评论

相关推荐

    mysql_Query优化

    - **统计信息的使用**: 在没有足够的 Hint 指导时,Optimizer 会利用表和索引的统计信息来估计不同的执行计划的成本,并选择最经济的方案。 #### 二、Query 语句优化的基本思路和原则 **2.1 Query 语句优化的基本...

    mongodb之使用explain和hint性能分析和优化

    当你第一眼看到explain和hint的时候,第一个反应就是mysql中所谓的这两个关键词,确实可以看出,这个就是在mysql中借鉴过来的,既然是借鉴过来的,我想大家都知道这两个关键字的用处,话不多说,速速观看~~~1....

    某行MySQL数据库开发规范

    #### 五、理解优化器、EXPLAIN、HINT **5.1 Explain功能** - **ID**:表示查询中执行顺序。 - **select_type**:查询类型,如`SIMPLE`、`PRIMARY`、`SUBQUERY`等。 - **type**:访问类型,例如`ALL`、`index`、`...

    oracle mysql sybase 等多种数据库脚本提示

    在Oracle中,"提示"(Hint)是一种特殊的注释,用于指导优化器选择执行计划,例如`/*+ INDEX(table index_name) */`用于强制使用特定索引。 MySQL则是一款开源、免费的关系型数据库管理系统,适用于中小型企业及...

    给MySQL建立索引1

    【MySQL 索引基础与应用】 索引是数据库管理系统中的一个重要概念,它极大地提高了数据检索的速度,减少了数据访问的时间。在MySQL中,为数据库表的列创建索引可以优化查询性能,尤其对于频繁进行筛选和排序的字段...

    MySQL中一些优化straight_join技巧

    通过查看执行计划(explain),发现优化器选择了错误的表顺序,导致了不必要的文件排序(Using filesort),这明显影响了查询效率。在分析了索引和表结构后,DBA可以决定使用straight_join来强制指定连接顺序,这样...

    MongoDB性能篇之创建索引,组合索引,唯一索引,删除索引和explain执行计划

    - `hint()`命令用于强制查询使用特定索引,如`db.t5.find({age: {$lt: 30}}).hint({name: 1, age: 1}).explain()`。 6. **删除索引** - 删除所有索引:`db.t3.dropIndexes()`。 - 删除特定索引:`db.t4.drop...

    MySQL利用profile分析慢sql详解(group left join效率高于子查询)

    此外,还可以考虑其他优化策略,比如使用`EXPLAIN`分析查询计划,检查索引是否被有效利用,或者使用`INDEX` Hint指导优化器选择更优的索引。还可以考虑分批处理大数据,减少一次性返回的数据量,以及合理设计数据库...

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

    通过这些强制性操作,你可以更精细地控制MySQL如何执行查询,以优化性能,尤其是在处理大规模数据和复杂查询时。然而,过度使用或不恰当使用这些操作可能导致性能下降,因此应谨慎使用,并结合EXPLAIN分析和性能测试...

    阿里巴巴DBA面试题

    - RBO方式是根据预设的规则来执行SQL语句的优化,这种方式不依赖于表和索引的统计信息,而是依据一系列固定的规则。 - CBO方式则是根据SQL语句的代价(CPU和内存的消耗)来决定执行计划,这种方式依赖于表及索引的...

    Mongodb索引的优化

    ### 三、索引策略与优化 - **选择合适的索引类型**:除了基本的单字段索引,还有复合索引、唯一索引、地理空间索引等。选择正确的索引类型能有效提高查询效率。 - **避免索引过多**:虽然索引能提高查询速度,但...

    query_optimizer

    此外,了解数据库的特定优化特性,如Oracle的Hint或MySQL的EXPLAIN功能,也能帮助调整查询策略。 在`query_optimizer-main` 这个目录中,可能包含的是一个Java项目,专注于查询优化器的研究或实现。可能有以下内容...

Global site tag (gtag.js) - Google Analytics