精华内容
下载资源
问答
  • MySQL创建索引/判断索引是否生效

    千次阅读 2019-08-06 12:36:51
    查询是否索引:EXPLAIN + 查询语句 EXPLAIN SELECT * FROM jingjia_info; EXPLAIN列的解释: table:显示这一行的数据是关于哪张表的。 type:这是重要的列,显示连接使用了何种类型。从最好到最差的...

    MySQL创建索引:
    现有数据表 jingjia_info,共658行数据:

    SELECT * FROM jingjia_info;
    

    在这里插入图片描述
    查询表中使用的索引

    	show index from 表名;
    	eg.  show index from jingjia_info;
    

    在这里插入图片描述
    查看查询语句中是否使用了索引:
    方式一:EXPLAIN + 查询语句

    	EXPLAIN SELECT * FROM jingjia_info;
    

    在这里插入图片描述
    EXPLAIN列的解释:

    • table:显示这一行的数据是关于哪张表的。
    • type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、index和ALL。
    • possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句。
    • ==key: 实际使用的索引。如果为NULL,则没有使用索引。==很少的情况下,MySQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MySQL忽略索引。
    • key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好。
    • ref:显示索引的哪一列被使用了,如果可能的话,是一个常数。
    • rows:MySQL认为必须检查的用来返回请求数据的行数。
    • Extra:关于MySQL如何解析查询的额外信息。
    • extra列返回的描述的意义:

    *方式二:使用时间检测

    	# 运行时间检测
    	set profiling=1;
    	SQL;
    	# 查看执行时间
    	show profiles;
    

    创建新索引:CREATE INDEX index_name ON 表名(字段1,字段2,…);

    CREATE INDEX index_info ON jingjia_info(jingjia_no,);  # jingjia_no 是一个id字段
    

    使用 EXPLAIN 查询jingjia_no

    	EXPLAIN SELECT jingjia_no FROM jingjia_info;
    

    在这里插入图片描述
    查询一个未加索引的普通字段 ggfb

    EXPLAIN SELECT ggfb FROM jingjia_info;
    

    在这里插入图片描述

    展开全文
  • MYSQL 判断索引是否生效

    千次阅读 2018-08-10 09:44:00
    explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如:   explain select surname,first_name...

    explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。

    使用方法,在select语句前加上explain就可以了:

    如:

    
     
    1. explain select surname,first_name form a,b where a.id=b.id 

    EXPLAIN列的解释:

    table:显示这一行的数据是关于哪张表的

    type:这是重要的列,显示连接使用了何种类型。从最好到最差的连接类型为const、eq_reg、ref、range、indexhe和ALL

    possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句

    key: 实际使用的索引。如果为NULL,则没有使用索引。很少的情况下,MYSQL会选择优化不足的索引。这种情况下,可以在SELECT语句中使用USE INDEX(indexname)来强制使用一个索引或者用IGNORE INDEX(indexname)来强制MYSQL忽略索引

    key_len:使用的索引的长度。在不损失精确性的情况下,长度越短越好

    ref:显示索引的哪一列被使用了,如果可能的话,是一个常数

    rows:MYSQL认为必须检查的用来返回请求数据的行数

    Extra:关于MYSQL如何解析查询的额外信息。将在表4.3中讨论,但这里可以看到的坏的例子是Using temporary和Using filesort,意思MYSQL根本不能使用索引,结果是检索会很慢

    extra列返回的描述的意义

    Distinct:一旦MYSQL找到了与行相联合匹配的行,就不再搜索了

    Not exists: MYSQL优化了LEFT JOIN,一旦它找到了匹配LEFT JOIN标准的行,就不再搜索了

    Range checked for each Record(index map:#):没有找到理想的索引,因此对于从前面表中来的每一个行组合,MYSQL检查使用哪个索引,并用它来从表中返回行。这是使用索引的最慢的连接之一

    Using filesort: 看到这个的时候,查询就需要优化了。MYSQL需要进行额外的步骤来发现如何对返回的行排序。它根据连接类型以及存储排序键值和匹配条件的全部行的行指针来排序全部行

    Using index: 列数据是从仅仅使用了索引中的信息而没有读取实际的行动的表返回的,这发生在对表的全部的请求列都是同一个索引的部分的时候

    Using temporary 看到这个的时候,查询需要优化了。这里,MYSQL需要创建一个临时表来存储结果,这通常发生在对不同的列集进行ORDER BY上,而不是GROUP BY上

    Where used 使用了WHERE从句来限制哪些行将与下一张表匹配或者是返回给用户。如果不想返回表中的全部行,并且连接类型ALL或index,这就会发生,或者是查询有问题不同连接类型的解释(按照效率高低的顺序排序)

    system 表只有一行:system表。这是const连接类型的特殊情况

    const:表中的一个记录的最大值能够匹配这个查询(索引可以是主键或惟一索引)。因为只有一行,这个值实际就是常数,因为MYSQL先读这个值然后把它当做常数来对待

    eq_ref:在连接中,MYSQL在查询时,从前面的表中,对每一个记录的联合都从表中读取一个记录,它在查询使用了索引为主键或惟一键的全部时使用

    ref:这个连接类型只有在查询使用了不是惟一或主键的键或者是这些类型的部分(比如,利用最左边前缀)时发生。对于之前的表的每一个行联合,全部记录都将从表中读出。这个类型严重依赖于根据索引匹配的记录多少—越少越好

    range:这个连接类型使用索引返回一个范围中的行,比如使用>或<查找东西时发生的情况

    index: 这个连接类型对前面的表中的每一个记录联合进行完全扫描(比ALL更好,因为索引一般小于表数据)

    ALL:这个连接类型对于前面的每一个记录联合进行完全扫描,这一般比较糟糕,应该尽量避免

     

     

    本文转自:https://blog.csdn.net/qq_33774822/article/details/61197420

    展开全文
  • 1、如何判断索引是否生效? 答:在查询语句前加上explain。 explain函数作用:显示了MYSQL如何使用索引来处理select语句以及连接表。 explain select id , name table where name like 'abc%' 2、索引失效的情况...

    1、如何判断索引是否生效?

    答:在查询语句前加上explain。
    explain函数作用:显示了MYSQL如何使用索引来处理select语句以及连接表。

    explain select id , name table where name like 'abc%'
    

    在这里插入图片描述

    2、索引失效的情况

    • 2.1、条件中有or

    这里是引用

    • 2.2、like以%开头

    在这里插入图片描述

    • 2.3、存在索引列的数据类型隐式转换

    这里是引用

    • 2.4、where子句中对索引列有数学运算

    这里是引用

    2.5、where 子句里对有索引列使用函数,用不上索引

    在这里插入图片描述

    • 2.6、复合索引未用左列字段

    3、为什么Mysql用B+树做索引而不用B-树或红黑树?

    答:查询效率是由磁盘IO的次数决定。

    B-树:

    每个节点都有数据域,增加了节点的大小,磁盘的IO次数也增加(因为一次磁盘IO读出的数据量大小是固定的,每次读出的数据少,IO次数就会增加)。

    这里是引用


    B+树相对B树的优点:

    1、B+树的磁盘读写代价更低。

    因为只有叶子节点存放数据,非叶子节点只存放索引,B树的每个索引节点都有data域。

    2、B+树带有顺序访问指针。

    所有的叶子节点之间有一个链指针,每个叶子节点都代表一个区间,从左到右也是有顺序的。而在数据库中基于范围的查询是非常频繁的,B树不支持这种遍历操作。

    3、B+树的查询效率更加稳定。

    由于非叶子节点存放的是数据的索引,而真正的数据存放在叶子节点中。而关键字查询的路径长度相同,因此每个数据的查询效率相当。
    B树的非叶子节点也存放数据,因此不同的数据在不同层,查询效率也有高有低。

    在这里插入图片描述

    红黑树

    红黑树是二叉查找树,在大规模数据存储的时候,红黑树往往出现由于树的深度过大而造成磁盘IO读写过于频繁,进而导致效率低下。

    而B+树是多路查找树,树的深度比红黑树小得多,而磁盘IO的次数和树的深度有很大关系。

    综上

    B+树相对于红黑树的优点:

    1、高度比红黑树小,有效地减少了磁盘的随机访问;

    2、B+树的数据节点临近,因此能发挥磁盘顺序读取的优势;

    3、B+树的数据全部存在叶子节点,存储浪费小。


    红黑树和B+树的比较:

    1、使用场合。红黑树常用于存储内存中的有序数据,增删很快;B+树常用于文件系统和数据库索引。
    2、子节点数量。红黑树只有两个子节点,而B+树有多个子节点,因此存储相同量的数据,B+树的高度更小。

    展开全文
  • Oracle使用PLsql时判断索引是否生效

    千次阅读 2017-08-22 18:12:04
    执行完select语句按F5即可查看索引是否生效 索引扫描分五种: INDEX UNIQUE SCAN(索引唯一扫描) INDEX RANGE SCAN(索引范围扫描) INDEX FULL SCAN(索引全扫描) INDEX FAST FULL SCAN(索引快速扫描...


    工具  —>  首选项 —>   窗口类型  —>  计划窗口  —>  根据需要配置要显示在执行计划中的列

    选择 访问谓词,字节,基数,耗费,CPU耗费,对象名称,优化器,分去开始,分区停止,时间,IO耗费

    基数(Rows):Oracle估计的当前操作的返回结果集行数

    字节(Bytes):执行该步骤后返回的字节数

    耗费(COST)、CPU耗费:Oracle估计的该步骤的执行成本,用于说明SQL执行的代价,理论上越小越好(该值可能与实际有出入)

    时间(Time):Oracle估计的当前操作所需的时间

    执行完select语句按F5即可查看索引是否生效

    索引扫描分五种:

    • INDEX UNIQUE SCAN(索引唯一扫描)
    • INDEX RANGE SCAN(索引范围扫描)
    • INDEX FULL SCAN(索引全扫描)
    • INDEX FAST FULL SCAN(索引快速扫描)
    • INDEX SKIP SCAN(索引跳跃扫描)
    展开全文
  • 数据库索引是否生效

    千次阅读 2018-09-06 11:18:26
    一、如何判断数据库索引是否生效 首先在接着探讨之前,我们先说一下,如何判断数据库的索引是否生效!相信大家应该猜到了,就是explain!explain显示了MySQL如何使用索引来处理select语句以及连接表。他可以帮助...
  • template bool CoreTools::MinHeapRecordStored ::IndexIsValid() const { std::vector indexVector(m_MaxElements,-1); for (int i = 0; i { int index = m_Records[i].GetIndex();... 
  • explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如: explain select surname,first_name form a,b ...
  • 查看索引是否有效 1.未使用索引前 jinbo=# explain analyze select * from jinbo.student where score < 80 and score < 90 and sex = 1; QUERY PLAN ...
  • Mysql联合索引生效判断

    千次阅读 2020-07-09 15:43:10
    当最左侧字段是常量引用时,索引就十分有效。 以下是一些例子: (1) select * from myTest where a=3 and b=5 and c=4; ---- abc顺序 abc三个索引都在where条件里面用到了,而且都发挥了作用 (2) selec
  • 怎么知道索引是否生效

    千次阅读 2017-09-19 14:36:17
    explain显示了MySQL如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如: explain select surname,first_name from...
  • SELECT STATUS FROM USER_INDEXES WHERE INDEX_NAME='索引名'; VALID——索引有效
  • 下面我们来解释MySQL检测索引是否生效的关键字EXPLAIN。 使用方法 EXPLAIN SELECT surname,first_name form a,b WHERE a.id=b.id 返回列解释 1、table:显示这一行的数据是关于哪张表的。 2、type:这是重要的...
  • MySQL中EXPLAIN解释命令 查看索引是否生效

    万次阅读 多人点赞 2017-03-29 15:31:50
    explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 使用方法,在select语句前加上explain就可以了: 如: explain select surname,first_name form...
  • 在哪些列上添加索引比较好: 1.比较频繁的作为查询的字段 2.唯一性太差的字段不适合加索引,要找唯一性比较好的 3.更新太频繁的字段不适合做索引 4.不会出现在where中的 不应该建立索引 查询某表的所有索引: show ...
  • # 查看是否有以“id”创建的倒序索引,如果没有则添加 indexs = collection_target.index_information() if "id_-1" not in indexs: collection_target.create_index([("id", -1)]) # 先查询表中已经存在的记录的...
  • explan sql EXPLAIN列的解释: table:显示这一行的数据是关于哪...possible_keys:显示可能应用在这张表中的索引。如果为空,没有可能的索引。可以为相关的域从WHERE语句中选择一个合适的语句 key: 实际使用的...
  • 如何知道mysql中sql语句索引是否生效

    千次阅读 2014-05-26 16:10:38
    在这种情况下,key列包含了使用的索引的清单,key_len包含了使用的索引的最长的关键元素。 例如: mysql> explain select * from t4 where id=3952602 oraccountid=31754306 ; +----+-------------+-------+...
  • 上图中where后是否用到了索引,如果用了,是否充分用到索引,用到了哪些列?为什么? 命中了索引a 命中了索引a和b 索引充分利用,包含三列的联合索引都命中了 因为最左前缀原则,三个都没有命中索引 命中一个a ...
  • 几乎所有的小伙伴都可以随口说几句关于创建索引的优缺点,也知道什么时候创建索引能够提高我们的查询性能,什么时候索引会更新,但是你有没有注意到,即使你设置...一、如何判断数据库索引是否生效 首先在接着探讨...
  • 如果判断是否需要创建索引

    千次阅读 2013-06-14 16:40:42
    1、较频繁的作为查询条件的字段应该创建索引. 2、唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件: 唯一性太差的字段:如状态字段,类型字段等。这些字段即使创建了单独的索引,MySQL Query Optimizer...
  • 如果索引因为某些原因无效或者因为很长时间没有...何时需要重建索引,可以利用下面的过程进行判断。 查询数据库中有哪些索引。SQL>SELECT OWNER,INDEX_NAME FROM user_indexes;SQL语句的执行结果是:INDEX_NAME ...
  • MySQL索引生效

    2018-09-23 09:56:09
    如何判断数据库索引是否生效 explain语句显示MySQL如何使用索引来处理select语句以及连接表,他可以帮助选择更好的索引和写出更优化的查询语句 可以看到,使用explain显示了很多列,各个关键字的含义如下: ...
  • 判断sql语句是否使用索引查询

    千次阅读 2019-04-03 11:49:51
    如果此信息显示Using filesort或者Using temporary的话会很吃力,WHERE和ORDER BY的索引经常无法兼顾,如果按照WHERE来确定索引,那么在ORDER BY时,就必然会引起Using filesort,这就要看是先过滤再排序划算,还是...
  • 关于 SQL的组合索引生效问题

    千次阅读 2019-03-18 15:55:59
    首先按照建立索引的顺序排好,从a开始往后判断是否具有连续性(依据建立索引的顺序),如果直至最后都具有连续性,那么这些索引生效。如果在下一个节点处的索引连续性断掉,那么当前节点的索...
  • 第一步: explain plan for select * from T_USER where OPEN_ID='12345'; 第二步: select * from table(dbms_xplan.display);

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 194,903
精华内容 77,961
关键字:

判断索引是否生效