MYSQL索引问题:索引在查询中如何使用?看了很多资料都只说索引的建立。是否建立了就不用再理会?

4年前 (2021-06-12)阅读752回复0
你给我过来
你给我过来
  • 管理员
  • 发消息
  • 注册排名592
  • 经验值105
  • 级别管理员
  • 主题21
  • 回复0
楼主

这里有篇博客《使用例子来介绍 MySQL索引的简单用法》

021yin.com /article/use-examples-to-introduce-simple-usage-of-mysql-index.html

  假如你有一个表,

SQL> CREATE TABLE test_tab (

2 id INT,

3 name VARCHAR(10),

4 age INT,

5 val VARCHAR(10)

6 );

你的业务,有一个查询,是

SELECT * FROM test_tab WHERE name = 一个外部输入的数据

刚开始,数据不多的时候,执行效果还不错。

随着数据量的增加,这个查询,执行起来,越来越慢了。

然后在 name 上面 建立了索引

CREATE INDEX idx_test4_name ON test_tab (name );

这样, 可以加快前面那个查询的速度。

但是,某天,你执行了下面这个SQL, 发现速度又慢了

SELECT * FROM test_tab WHERE age = 25

为啥呢? 因为 age 字段上面,没有索引

索引只在 name 上面有

换句话说, 也就是 WHERE 里面的条件, 会自动判断,有没有 可用的索引,如果有, 该不该用。

多列索引,就是一个索引,包含了2个字段。

例如:

CREATE INDEX idx_test_name_age ON test_tab (name, age);

那么

SELECT * FROM test_tab

WHERE

name LIKE '张%'

AND age = 25

这样的查询,将能够使用上面的索引。

多列索引,还有一个可用的情况就是, 某些情况下,可能查询,只访问索引就足够了, 不需要再访问表了。例如:

SELECT

AVG( avg ) AS 平均年龄

FROM

test_tab

WHERE

name LIKE '张%'

这个时候, name 与 age 都包含在索引里面。

   查询不需要去检索表中的数据。

0
0
收藏0
回帖

MYSQL索引问题:索引在查询中如何使用?看了很多资料都只说索引的建立。是否建立了就不用再理会? 期待您的回复!

取消
插入网络图片

取消确定

图片上传中
「 erxMiniEditor for erxForum 」
- 迷你富文本编辑器,尔今 作品 原创专用 -
提示信息