mysql什么情况可以不使用聚簇索引
1) 数据唯一性差的字段不要使用索引 比如性别,只有两种可能数据。意味着索引的二叉树级别少,多是平级。这样的二叉树查找无异于全表扫描。 2) 频繁更新的字段不要使用索引 比如logincount登录次数,频繁变化导致索引也频繁变化,增大数据库工作量,降低效率。 3) 字段不在where语句出现时不要添加索引 只有在where语句出现,mysql才会去使用索引 4) 数据量少的表不要使用索引 使用了改善也不大 另外。如果mysql估计使用全表扫描要比使用索引快,则不会使用索引。
mysql非聚簇索引树建立规则
MySQL的非聚集索引(也称为辅助索引)是在数据表中的非主键列上建立的索引。与聚集索引不同,非聚集索引中的索引条目不会按照物理上的顺序存储在磁盘上。在建立非聚集索引时,可以根据以下规则进行操作:
1. 基本规则:非聚集索引的建立需要在要索引的列上创建一个B树,并将B树的每个叶子节点指向数据行的主键值。
2. 索引选择:应选择与查询模式匹配的列作为索引的列,这样才能使查询更加高效。
3. 索引长度:索引的长度应尽量短,以减少存储空间和提高查询效率。
4. 前缀索引:可以为列的前缀创建索引,这样可以进一步减小索引的大小。
5. 多列索引:可以通过在多个列上建立联合索引来提高查询效率。
6. 唯一索引:可以将索引设置为唯一索引,以确保索引列的值在整个表中是唯一的。
7. 索引的创建和删除:在创建表时可以同时创建索引,也可以使用ALTER TABLE语句来创建和删除索引。
需要注意的是,在使用非聚集索引时,要注意对索引进行适当的维护,包括定期重建索引、删除不再使用的索引等,以保持索引的性能和效率。
MySQL非聚簇索引树的建立规则是基于B+树结构,根据索引列的值进行排序,相同值的行记录会存储在同一叶子节点上,而非聚簇索引树的叶子节点存储的是行记录的指针,因此可以快速定位到所需数据。为了保证索引的效率,需要遵循一些规则,如选择合适的索引列、避免重复索引、避免使用过长的索引列等。
InnoDB按照主键进行聚集,如果没有定义主键,InnoDB会试着使用唯一的非空索引来代替。如果没有这种索引,InnoDB就会定义隐藏的主键然后在上面进行聚集。 所以,对于 聚集索引 来说,你创建主键的时候,自动就创建了主键的聚集索引。
而普通索引(非聚集索引)的语法,大多数数据库都是通用的:
CREATE INDEX Syntax CREATE [UNIQUE|FULLTEXT|SPATIAL] INDEX index_name [index_type] ON tbl_name (index_col_name,...
) [index_type] index_col_name: col_name [(length)] [ASC | DESC] index_type: USING {BTREE | HASH | RTREE} [java] view plaincopy -- 创建无索引的表格 create table testNoPK ( id int not null, name varchar(10) )
; -- 创建普通索引 create index IDX_testNoPK_Name on testNoPK (name);