索引的设计和使用

索引是数据库中用来提高性能的最常用工具。

根据存储引擎可以定义每个表的最大索引数和最大索引长度,每种存储引擎(MyISAM,InnoDB,BDB,MEMORY等)对每个表至少支持16个索引,总索引长度至少为256字节。

前缀索引

要为city表创建了10个字节的前缀索引,语法是:

create  index  cityname on  city (city_name(10));

删除索引

DROP INDEX cityname ON city;

设计索引的原则

(1)、搜索的索引列,不一定是所要选择的列。

最适合索引的列出现在WHERE子句中的列,或者连接子句中指定的列,而不是出现在SELECT关键字后的选择列表中的列。

(2)、使用唯一索引。考虑某列中值的分布。索引的列基础越大,索引的效果越好。如区分日期的列效果就比区分性别好

(3)、使用短检索。如果对字符串进行检索,应该指定一个前缀长度。例如:一个CHAR(200)列,如果前10个或20个字符内,多数值是唯一的,那么就不要对整个列进行检索。对前10个或20个字符进行检索能够节省大量索引空间,是查询更快。

(4)、利用最左前缀。在创建一个n列索引时,实际是创建了MySQL可利用的n个索引。多列索引可起几个索引的作用,因为可利用索引最左边的列级来匹配。

(5)、不要过度索引。

BTREE索引和HASH索引

HASH索引注意事项

MySQL索引(PRIMARY KEY、UNIQUE、INDEX、FULLTEXT等)

keyprimary key区别 
CREATE TABLE wh_logrecord ( 
logrecord_id int(11) NOT NULL auto_increment, 
user_name varchar(100) default NULL, 
operation_time datetime default NULL, 
logrecord_operation varchar(100) default NULL, 
PRIMARY KEY (logrecord_id), 
KEY
wh_logrecord_user_name (user_name) 

解析: 
KEY wh_logrecord_user_name (user_name)                     //表(字段)
本表的user_name字段与wh_logrecord_user_name表user_name字段建立外键 
括号外是建立外键的对应表,括号内是对应字段 
类似还有 KEY
user(userid) 
当然,key未必都是外键

总结: 
Key是索引约束,对表中字段进行约束索引的,都是通过primary
foreign unique等创建的。常见有foreign key,外键关联用的。

key的用途:主要是用来加快查询速度的。

Primary key的用途:主键,只能有一个。

UNIQUE KEY的用途:主要是用来防止数据插入的时候重复的。

二、KEYINDEX区别 
KEY通常是INDEX同义词。如果关键字属性PRIMARY KEY在列定义中已给定,则PRIMARY KEY也可以只指定为KEY。这么做的目的是与其它数据库系统兼容。 PRIMARY KEY是一个唯一KEY,此时,所有的关键字列必须定义为NOT NULL。如果这些列没有被明确地定义为NOT NULL,MySQL应隐含地定义这些列。一个表只有一个PRIMARY KEY。

三、mysqlUNIQUE KEYPRIMARY KEY有什么区别 
1、 Primary key的1个或多个列必须为NOT NULL,如果列为NULL,在增加PRIMARY KEY时,列自动更改为NOT NULL。而UNIQUE KEY 对列没有此要求 
2、一个表只能有一个PRIMARY
KEY,但可以有多个UNIQUE
KEY 
3、主键和唯一键约束是通过参考索引实施的,如果插入的值均为NULL,则根据索引的原理,全NULL值不被记录在索引上,所以插入全NULL值时,可以有重复的,而其他的则不能插入重复值。 
alter table t add constraint uk_t_1 unique
(a,b); 
insert into t (a ,b ) values
(null,1);    # 不能重复 
insert into t (a ,b ) values (null,null);#可以重复

如果对多列进行索引(组合索引),列的顺序非常重要

MySQL仅能对索引最左边的前缀进行有效的查找

时间: 2024-11-08 23:30:16

索引的设计和使用的相关文章

Mysql 学习-索引的设计原则

索引的设计不合理或者缺少索引都会对数据库和应用程序的性能造成障碍.高效的索引对获的良好性能非常重要.设计索引是,应该考虑一下准则: (1)索引并非语讹夺越好,若一个表中有大量索引,不仅占用磁盘空间,而且会影响Insert/delete/update等语句的性能,因为当表中的数据更改同时,索引也会进行调整和更新. (2)避免对经常更新的表最好不要使用索引,并且索引中的列尽可能少,而对经常用于查询的字段应该创建索引,但要避免添加不必要的字段. (3)数据量小的表最好不要使用索引,由于数据比较少,查询

HBase二级索引的设计

摘要 最近做的一个项目涉及到了多条件的组合查询,数据存储用的是HBase,恰恰HBase对于这种场景的查询特别不给力,一般HBase的查询都是通过RowKey(要把多条件组合查询的字段都拼接在RowKey中显然不太可能),或者全表扫描再结合过滤器筛选出目标数据(太低效),所以通过设计HBase的二级索引来解决这个问题 查询需求 多个查询条件构成多维度的组合查询,需要根据不同组合查询出符合查询条件的数据 HBase的局限性 HBase本身只提供基于行键和全表扫描的查询,而行键索引单一,对于多维度的

(7)mysql索引的设计和使用

概述 ??索引用于快速找出在某个列中有一特定值的行.不使用索引,MySQL必须从第1条记录开始然后读完整个表直到找出相关的行.表越大,花费的时间越多.如果表中查询的列有一个索引,MySQL能快速到达一个位置去搜寻到数据文件的中间,没有必要看所有数据. ??在MySQL中所有的类型数据列都可以被索引,对相关列使用索引是提高select操作性能的最佳途径.MyISAM和InnoDB存储引擎的表默认创建索引都是BTREE索引.MyISAM还支持全文本索引,该索引可以用于创建全文搜索.默认情况下, ME

MySQL索引的设计、使用和优化

原文:http://bbs.landingbj.com/t-0-243071-1.html MySQL索引概述 所有MySQL列类型可以被索引.对相关列使用索引是提高SELECT操作性能的最佳途径.根据存储引擎定义每个表的最大索引数和最大索引长度.所有存储引擎支持每个表至少16个索引,总索引长度至少为256字节.大多数存储引擎有更高的限制. 在MySQL 5.1中,对于MyISAM和InnoDB表,前缀可以达到1000字节长.请注意前缀的限制应以字节为单位进行测量,而CREATE TABLE语句

企业内搜索引擎项目(二):索引的设计和创建

1. 设计 @ 索引创建 采用[动态索引]的策略,可以实现实时搜索的功能: 动态索引的实现需要“倒排索引”,“临时索引”和“已删除文档列表”,其中“倒排索引”存储在磁盘文件中,“临时索引”存储在内存中: 思路: 当系统发现有新文档进入时,立即将其加入临时索引中:有文档被删除时,则将其加入删除文档队列:文档被更改时,则将原先文档放在删除队列,解析更新后的文档内容,并将其加入临时索引中: 用户输入查询请求时,搜索引擎同时从倒排索引和临时索引中读取结果,并将两个结果进行合并,之后用删除文档列表进行过滤

奇虎360 HBASE 二级索引的设计与实践

基于RowKey 的索引问题总结 1.索引单一 2.多维度(字段/列)查询困难 多字段分别作为RK,写入多次 组合字段作为RK,设计复杂,不灵活 3.不经过索引的并行scan过滤,大量资源消耗,无时效性可言 总体设计 二级索引构建模式 1)以主数据的列值作为索引数据的RowKey,以主数据的RowKey 作为索引数据的列值,以此来构建指定列作为查询条件的Hbase 二级索引. 2)索引的构建与数据的查询都是分布式.并发式进行的 索引设计 1)索引与主数据存放在同一张表的不同Column Fami

Day4 MySql触发器视图索引以及设计优化

触发器 MySQL包含对触发器的支持.触发器是一种与表操作有关的数据库对象,当触发器所在表上出现指定事件时,将调用该对象,即表的操作事件触发表上的触发器的执行. 通过事件触发,不能传参 语法 CREATE [DEFINER = { user | CURRENT_USER }] TRIGGER trigger_name trigger_time trigger_event ON tbl_name FOR EACH ROW [trigger_order] trigger_body trigger_t

数据库索引的设计原则

为了使索引的使用效率更高,在创建索引时,必须考虑在哪些字段上创建索引和创建什么类型的索引.那么索引设计原则又是怎样的? 建表时一定要有主键,如果相关列可以作为主键,做一个无关列 1.选择的唯一性 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录.例如,学生表中学号是具有唯一性的字段.为该字段建立唯一性索引可以很快的确定某个学生的信息.如果使用姓名的话,可能存在同名现象,从而降低查询速度. 主键索引和唯一键索引,在查询中使用是效率最高的. 注意:如果重复值较多,可以考虑采用联合索引 2

MySQL索引的设计和使用

一. 索引概述 MyISAM和InnoDB存储引擎的表默认创建的都是BTREE索引.MySQL目前还不支持函数索引(5.7版本开始支持),但支持前缀索引,即对索引字段的前N个字符创建索引.前缀索引的长度和存储引擎相关,对于MyISAM存储引擎的表,索引的前缀长度可以达到1000字节长,而对于InnoDB存储引擎的表,索引的前缀长度最长是767字节.请注意前缀的限制应以字节为单位进行测量,而create table语句中的前缀长度解释为字符数.在为使用多字节字符集的列指定前缀长度时一定要加以考虑.