一、执行情况查看
EXPLAIN SELECT * FROM STUDENT;
二、查看表索引
SHOW INDEX FROM STUDENT;
额外:Greenplum数据库查看表索引
SELECT * FROM PG_INDEXES WHERE TABLENAME = '[表名]';
三、创建索引
1、CREATE INDEX [INDEX_NAME] ON [TABLE_NAME] (COLUMN1,COLUMN2,... ...);
CREATE INDEX STUDENT_CLASS_SEX_INDEX ON STUDENT(CLASS,SEX);
2、ALTER TABLE [TABLE_NAME] ADD INDEX [INDEX_NAME] (COLUMN1,COLUMN2,... ...);
ALTER TABLE STUDENT ADD INDEX STUDENT_CLASS_SEX_INDEX (CLASS,INDEX);
两种区别:
方法1:必须提供索引名;一个语句一次只能建立一个索引;
方法2:会自动创建索引名,如果你不提供;可以在一个语句建立多个;
ALTER TABLE STUDENT
ADD INDEX STUDENT_CLASS_INDEX (CLASS),
ADD INDEX STUDENT_SEX_INDEX (SEX),
ADD COLUMN ALL_NAME VARCHAR(100) COMMENT '全名',
MODIFY COLUMN NAME VARCHAR(100);
四、删除索引
DROP INDEX [INDEX_NAME] FROM [TABLE_NAME];
ALTER TABLE [TABLE_NAME] DROP INDEX [INDEX_NAME];
五、一般创建索引的依据
如:需解决SQL查询效率
SELECT STUDENT.NAME AS '学生姓名',
DICT_SEX.DAVLUE AS '学生性别',
DICT_LIKE.DAVLUE AS '喜好描述'
FROM STUDENT_TAB STUDENT
LEFT JOIN SYS_DICTIONARY DICT_LIKE
ON DICT_LIKE.DKEY = SUTDENT.LIKE_OBJ AND DICT_LIKE.DTYPE = 'LIKE'
LEFT JOIN SYS_DICTIONARY DICT_SEX
ON DICT_SEX.DKEY = SUTDENT.SEX AND DICT_SEX.DTYPE = 'SEX'
WHERE STUDENT.CLASS = '1';
针对以上SQL进行查询效率优化,通过给使用到的表增加索引,达到增加查询效率,也可以自己用 EXPLAIN 查看SQL查询计划看,,当然可以直接给一些类型字段增加索引:
1、给 STUDENT_TAB 表的 CLASS字段增加索引,明显这是一个分类字段;
CREATE INDEX STUDENT_CLASS_INDEX ON STUDENT_TAB (CLASS);
2、给数据字典的分类字段 DTYPE增加索引;
CREATE INDEX DICT_TYPE_INDEX ON SYS_DICTIONARY (DTYPE);
除了上述经常给一些能区分数据,给数据分类的字段增加索引提升速度外,也可以看SQL条件,依据SQL条件直接增加索引,比如 左关联数据字典表条件 DICT.KEY+DICT.DTYPE
CREATE INDEX DICT_DKEY_TYPE_INDEX ON SYS_DICTIONARY (DKEY,DTYPE);