SQL>CREATE TABLE test_tab (
2id INT,
3name VARCHAR(10),
4age INT,
5val 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 都包含在索引里面。 查询不需要去检索表中的数据。
一、CREATE INDEX方法CREATE INDEX <索引名>ON <表名>(<列名>[<长度>] [ ASC | DESC])
限制:只能增加普通索引INDEX和UNIQUE INDEX索引这两种;不能创建PRIMARY KEY索引
二、ALTER TABLE方法
ALTER TABLE <表名>ADD INDEX [<索引名>] (<列名>,…)
ALTER TABLE <表名>ADD UNIQUE [ INDEX | KEY] [<索引名>] (<列名>,…)
ALTER TABLE <表名>ADD PRIMARY KEY (<列名>,…)
ALTER TABLE <表名>ADD FOREIGN KEY [<索引名>] (<列名>,…)
三、CREATE TABLE时候指定
创建一般索引
CREATE TABLE tb_stu_info
(
id INT NOT NULL,
name CHAR(45) DEFAULT NULL,
dept_id INT DEFAULT NULL,
age INT DEFAULT NULL,
height INT DEFAULT NULL,
INDEX(height)
)
创建唯一索引
mysql>CREATE TABLE tb_stu_info2
(
id INT NOT NULL,
name CHAR(45) DEFAULT NULL,
dept_id INT DEFAULT NULL,
age INT DEFAULT NULL,
height INT DEFAULT NULL,
UNIQUE INDEX(height)
)
创建主键(虽然ALTER TABLE也能创建,但主键一般都在创表时建立)
CREATE TABLE mytable(
ID INT NOT NULL,
username VARCHAR(16) NOT NULL,
PRIMARY KEY(ID)
)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)