MySQL几个概念

来源:互联网 发布:白手套 知乎 编辑:程序博客网 时间:2024/06/05 19:40

(1)limit m,n 和 limit m的区别
limit m,n 是[m,m+n]列; limit m是[0,m] (2)驱动表
EXPLAIN 结果中,第一行出现的表就是驱动表(Important!)
对驱动表可以直接排序,对非驱动表(的字段排序)需要对循环查的合并结果(临时表)进行排序
[驱动表] 的定义为:
1)指定了联接条件时,满足查询条件的记录行数少的表为[驱动表];
2)未指定联接条件时,行数少的表为[驱动表](Important!)。
3)永远用小结果集驱动大结果集
(3)前缀索引
索引字符串值的前缀(prefixe)。如果你需要索引一个字符串数据列,那么最好在任何适当的情况下都应该指定前缀长度。 例如,如果有CHAR(200)数据列,如果前面10个或20个字符都不同,就不要索引整个数据列。 索引前面10个或20个字符会节省大量的空间 你可以索引CHAR、VARCHAR、BINARY、VARBINARY、BLOB和TEXT数据列的前缀 前缀索引有一点不足的地方,就是在查询语句中order by 和group by不能使用到前缀索引
(4)全文索引
(5)MySQL在以下操作场景下会使用索引:
1) 快速查找符合where条件的记录
2) 快速确定候选集。若where条件使用了多个索引字段,则MySQL会优先使用能使候选记录集规模最小的那个索引,以便尽快淘汰不符合条件的记录。
3) 如果表中存在几个字段构成的联合索引,则查找记录时,这个联合索引的最左前缀匹配字段也会被自动作为索引来加速查找。
例如,若为某表创建了3个字段(c1, c2, c3)构成的联合索引,则(c1), (c1, c2), (c1, c2, c3)均会作为索引,(c2, c3)就不会被作为索引,而(c1, c3)其实只利用到c1索引。
4) 多表做join操作时会使用索引(如果参与join的字段在这些表中均建立了索引的话)
5) 若某字段已建立索引,求该字段的min()或max()时,MySQL会使用索引
6) 对建立了索引的字段做sort或group操作时,MySQL会使用索引
7)若已对名为col_name的列建了索引,则形如”col_name is null”的SQL会用到索引
8)比较的表达式,如=, >, >=, <, <=及between操作
(6). 索引的几个原则
1、表的主键、外键必须有索引;
2、数据量超过300的表应该有索引;
3、经常与其他表进行连接的表,在连接字段上应该建立索引;
4、经常出现在Where子句中的字段,特别是大表的字段,应该建立索引;
5、索引应该建在选择性高的字段上;
6、索引应该建在小字段上,对于大的文本字段甚至超长字段,不要建索引;
7、复合索引的建立需要进行仔细分析;尽量考虑用单字段索引代替:
A、正确选择复合索引中的主列字段,一般是选择性较好的字段;
B、复合索引的几个字段是否经常同时以AND方式出现在Where子句中?单字段查询是否极少甚至没有?如果是,则可以建立复合索引;否则考虑单字段索引;
C、如果复合索引中包含的字段经常单独出现在Where子句中,则分解为多个单字段索引;
D、如果复合索引所包含的字段超过3个,那么仔细考虑其必要性,考虑减少复合的字段;
E、如果既有单字段索引,又有这几个字段上的复合索引,一般可以删除复合索引;
8、频繁进行数据操作的表,不要建立太多的索引;

0 0
原创粉丝点击