1.使用索引来进行order by
(mark!!!看的笔记困惑,书上着墨不多,以后分析代码时细看!!)
只有当索引的顺序和order by子句的顺序完全一致,并且所有列的排序方向一样才可以。当联接查询时,orderby的必须是第一个表。
排序查询的where和order by需要形成索引的最左前缀,即总是要包含索引的左边的列。
例如对于表a(i int,j int ,k int,t int),在i,j,k上建索引
如下:
.....where i =.... order by j,k;
.....where i>....order by i,j;
如下则不能使用索引进行排序的查询
....where i=....order by j desc,k asc;
....where i=....order by j,t....引用不在索引中的列
....where i=....order by k.....不能形成最左前缀(隔着j)
....where i>....order by j,k...第一列上有范围条件
2.压缩索引
MyISAM使用前缀压缩来减小索引大小,默认情况下会压缩字符串,也可以压缩整数
可以使用create table时用PACK_KEYS控制索引压缩的方式。
PACK_KEYS在MySQL手册中如下描述:
如果您希望索引更小,则把此选项设置为1。这样做通常使更新速度变慢,同时阅读速度加快。把选项设置为0可以取消所有的关键字压缩。把此选项设置为DEFAULT时,存储引擎只压缩长的CHAR或VARCHAR列(仅限于MyIS