【mysql索引学习一】mysql索引使用

假如你有一个表,

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 );
这样, 可以加快前面那个查询的速度。

但是,某天,你执行了下面这个S Q L, 发现速度又慢
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 都包含在索引里面。 查询不需要去检索表中的数据。

Mysql索引需要注意以下几点

1.建立索引的时机:若表中的某字段出现在select、过滤、排序条件中,为该字段建立索引是值得的。
2.对于like '%xxx'的模糊查询,普通的索引是无法满足的,需要建立全文索引。
3.对于有多个条件的,比如: "...where a=xxx and b=yyy","...where a=xxx order by b","...where a=xxx group by b"。需要使用组合索引。但是组合索引只能在SQL语句中满足"最左前缀"的条件下使用。且组合索引有一些副作用,如索引尺寸可能比数据本身大,因为组合索引的组合条目多。所以在实际应用中,要量身定做,使用慢查询分析工具分析。
4.开启索引缓存,直接在内存中查找索引,不用再磁盘中。
5.建立索引是有代价的,当update、delete语句执行时,会使得索引更新,将耗掉更多的时间。可以使用mysqlreport报告,了解select、update、delete、insert、replace各语句所占的百分比。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值