1.索引如何建立?

CREATE INDEX 索引名称
ON 表名称 (列名称)

直接看例子:

假如你有一个表,

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 都包含在索引里面。 查询不需要去检索表中的数据。

2.什么情况下不适合建立索引:
比如性别可能就只有两个值,建索引不仅没什么优势,还会影响到更新速度,这被称为过度索引。
索引不会包含有NULL值的列
太长的列,可以选择只建立部分索引
更新非常频繁的数据不适宜建索引
posted on 2015-12-29 21:49  test-dongdong  阅读(207)  评论(0)    收藏  举报