首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

mysql 如何索引_mysql如何添加索引

mysql添加索引的方法:可以通过【create table】语句来添加,如【CONSTRAINT PRIMARY KEY | INDEX [] [] 】,表示创建一般索引。...在mysql中可以在创建(CREATE TABLE)的同时创建索引;也可以在创建创建索引,使用CREATE INDEX语句或ALTER TABLE 语句。...(视频教程推荐:mysql视频教程) 1、使用CREATE INDEX语句 可以使用专门用于创建索引的 CREATE INDEX 语句在一个已有的创建索引,但该语句不能创建主键。...而当主键是由多个列组成的多列索引,则不能使用这种方法,只能用在语句的最后加上一个 PRIMARY KRY(,…) 子句的方式来实现。...(,…) 4、创建外键索引ADD FOREIGN KEY [] (,…) 示例1:创建一个 tb_stu_info3后,在该的 id 字段上使用 UNIQUE 关键字创建唯一索引

7.2K20
您找到你想要的搜索结果了吗?
是的
没有找到

mysql创建索引

1、索引需要占用磁盘空间,因此在创建索引要考虑到磁盘空间是否足够 2、创建索引需要对表加锁,因此实际操作中需要在业务空闲期间进行 SELECT * FROM table_name WHERE...在已存在的中,可以使用ALTER TABLE语句或者CREATE INDEX语句创建索引 在已存在的中,索引创建语句结构 1.普通索引(Normal): ALTER TABLE 名 ADD INDEX...UNIQUE INDEX 索引名 ON 名(列名); 唯一索引的特点: 一个中,可以有多个唯一索引 查询效率高 如果在某一列建立唯一索引,必须保证这列不能有重复数据 如果一个唯一索引上指定...not null,等价于主键索引 3.单列索引: ALTER TABLE 名 ADD INDEX 索引名(列名); 或 CREATE INDEX 索引名 ON 名(列名); 4.组合索引: ALTER...,因此会占用存储空间,一般来说,索引占用的空间的数据的1.5倍;索引的维护和创建需要时间成本,这个成本随着数据量增大而增大;构建索引会降低数据的修改操作(删除,添加,修改)的效率,因为在修改数据的同时还需要修改索引

3.7K40

存储优化(3)-mongo大索引

":-1},"limit":1}} 增加一个索引 bizId,_id 增加索引过程 对于大(该表记录数5亿),建立索引过程涉及到锁,大量的读写操作、数据同步,肯定会影响线上的操作。.../#dbcmd.createIndexes 创建索引后,通过客户端连接,查看执行计划,始终扫描一行。...那是不是因为这个索引是后来的,plan-cache还没有更新的。...总结 最后解决是通过强制索引来避免索引误判,当然也可以将排序改成 sort({bizId:-1,_id:-1}) 这样也不会误判 总结一下: 大索引,需要确保不会block的其他操作,尽量选择空闲时候...,以background方式创建 增加完索引后,需要check索引是否发挥作用,只是通过explain有可能误判,还是需要结合数据库的slowlog来判断 同一个查询数据库也不总是使用一个索引,会根据查询情况进行调整

2.7K10

MySQL InnoDB创建索引

2.代码分析 2.1 建创建索引 假设我们在建创建主键,但是创建一个二级索引,SQL语句形如: CREATE TABLE t (a int, b int, index idx(b)) ENGINE...2.2 重启后创建索引 MySQL重启后,内部索引对象丢失,需要在启动后重新创建相关的索引MySQL重启后首先会将数据字典内的信息进行读取和初始化,然后根据数据字典的信息进行索引创建。...还是以上文的t为例,假设现在MySQL重启,如何在t上构建索引? step1: 创建聚簇索引 无论如何,聚簇索引都会第一个创建。.... // 和建创建索引的流程一致 可以看出,首先我们会打开一个对象,并获取其中的信息。当然,首先会打开系统以查看持久化的信息。...,其实建创建索引和重启后创建索引的本质过程是一样的,只是在前期步骤有所区别,到了真正为某张添加索引的时候,所走的路径可以说是完全一样的,不同情况下创建索引的步骤是殊途同归。

5.6K30

mysql为什么索引就能快

平时我们要优化 mysql 查询效率的时候,最常见的就是给加上合适的索引了,那今天就来聊聊为什么加了索引就快了呢。...mysql 索引其实就是一颗 B+ 树。...谭小谭,公众号:谭某人mysql索引为啥要选择B+树 (下) 也就是说每个至少都有一个主键索引,而且中所有的数据行都是存放在主键索引这个 B+ 树的叶子节点上的。...刚刚有说过,主键索引叶子节点上保存完整的整行记录值,二级索引叶子节点保存主键的值,所以上面这个 t 的数据在 mysql 底层的存储就如下示意图。 ?...select * from t where k > 3 and k < 6; 这就是为什么加了索引后,mysql 查询会变快的原因了,其实刚提到的这个回过程还可以再优化的,就是利用覆盖索引,后面的文章我们再详细说

2K30

Oracle 与 MySQL 的差异分析(3):创建索引

Oracle 与 MySQL 的差异分析(3):创建索引 1.1 命名 l Oracle: 名、字段名、索引名等,不能超过30个字符。...为 0 ,id 会自动 1;如果指定一个较大的 id,那么下次会从这个 id 继续增长。...1.3 索引 整个数据库中,MySQL索引是可以重名的,MySQL 索引级别的,但是 Oracle 索引是不可以重名的,它的索引是数据库级别的。...由于 MySQL 索引的命名是级别的,所以删除索引也要指定名。...MySQL 分区创建索引是本地索引,不支持全局索引创建索引不需要 load 关键字。在分区上一般不创建主键或唯一索引,如果要创建的话,需要包含分区列。

1.2K21

mysql查询索引_MySQL查看表索引

mysql> show index from tblname; mysql> show keys from tblname; · Table 的名称。...· Non_unique 如果索引不能包括重复词,则为0。如果可以,则为1。 · Key_name 索引的名称。 · Seq_in_index 索引中的列序列号,从1开始。...· Collation 列以什么方式存储在索引中。在MySQL中,有值‘A’(升序)或NULL(无分类)。 · Cardinality 索引中唯一值的数目的估计值。...基数根据被存储为整数的统计数据来计数,所以即使对于小型,该值也没有必要是精确的。基数越大,当进行联合时,MySQL使用该索引的机 会就越大。...· Sub_part 如果列只是被部分地编入索引,则为被编入索引的字符的数目。如果整列被编入索引,则为NULL。 · Packed 指示关键字如何被压缩。如果没有被压缩,则为NULL。

6.7K40

MySQL给字符串索引

MySQL是支持前缀索引的,前缀索引的优势就是占用的空间小,这同时带来的损失是,可能会增加额外的记录扫描次数。...,那这些语句就只能做全扫描 MySQL 是支持前缀索引的,可以定义字符串的一部分作为索引。...默认地,如果你创建索引的语句不指定前缀长度,那么索引就会包含整个字符串。...,这次值对了,将这行记录加入结果集; 重复上一步,直到在 idxe2 上取到的值不是’zhangs’,循环结束。...有以下2中方式 就是使用倒序存储,比如身份证倒序,查询的时候再用函数转一下 以及使用hash字段,在创建一个整数字段,来保存身份证的校验码,同时在这个字段上索引 这两种方式对比区别 从占用的额外空间来看

1K71

MySQL 创建索引索引效率验证

索引可以通过层层的筛选,快速精确地定位到指定的数据,避免了查询数据的全扫描。这种定位速度是数量级的速度,数据量越大,效果越明显。...当数据量达到十万条,查询所有数据,也花了一些时间。 4. 给数据创建索引 使用 create index 索引名 on 名(字段名称(长度)); 来创建索引。...创建索引后,查看索引,可以看到刚创建索引信息。 5. 删除索引 使用 drop index 索引名 on 名; 来删除索引。...开启 MySQL 运行时间监测 使用 set profiling=1; 开启 MySQL 运行时间检测,通过运行时间来对比有无索引的效率。...没有创建索引查询 select * from Phone_table where pid=77777; ? 从查询结果下面的时间可以看出是0.04秒。 3.

3K30

mysql5.7 创建提示时间戳非法

# 背景 mysql版本5.7.8,需要创建,研发提供的sql文件,执行后报错如下: ERROR 1067 (42000): Invalid default value for 'deleted_at...' 就猜测到时因为5.7版本的mysql默认的时间戳不允许输入0000-00-00 00:00:00这种格式,之前碰到过类似问题,需要修改配置 查看了研发提供的sql文件,果真如此: ‘create_at...不希望修改配置文件,通过修改sql_model就可以了的,这种对新建生效 SELECT @@sql_mode; 可查看sql_model,其中NO_ZERO_IN_DATE,NO_ZERO_DATE就是导致...5.7+版本无法输入0的时间戳 NO_ZERO_IN_DATE:在严格模式下,不允许日期和月份为零  NO_ZERO_DATE:设置该值,mysql数据库不允许插入零日期,插入零日期会抛出错误而不是警告

1.5K60

Innodb索引,这个时候会锁吗?

索引创建为例: image.png 从上文可见,当我们创建、删除或重命名索引,会采用“in place”的模式。...例如,在添加索引,如果中存在大量未提交的事务,则需要等待这些事务提交后才能开始索引构建。因此,建议在非高峰时段进行此类操作,以避免影响用户的正常使用。...对临时进行重命名操作,并创建索引,完成 DDL 操作。 INPLACE 算法原理 INPLACE 算法是在 MySQL 5.5 中引入的,旨在优化索引创建和删除过程的效率。...其原理是尽可能地使用原地算法进行 DDL 操作,而不是重新创建或复制表。 创建索引数据字典。 对原共享 MDL 锁,阻止对原的写操作,只允许查询操作。...Prepare 阶段: 创建临时 frm 文件。 EXCLUSIVE-MDL 锁,阻止读写操作。

15710

oracle创建索引的sql语句_mysql创建组合索引

创建索引一般分为在线索引和非在线索引,在线与非在线的区别:非在线锁,优先创建索引,此时DML都被阻塞,所以快;相反,在线锁的是行而非,通过临时进行索引创建,所以不会影响DML操作,但副作用就是慢...如果在生产环境操作,不停服务的话,势必导致创建索引期间仍有DML操作进来。另外如果是大,那么采用非在线而导致锁所带来的影响可能会很大。一句话,生产环境不停服的脚本操作,建议使用online。...1、创建索引。...DROP INDEX 索引名; 4、查看某个索引名需大写。 SELECT * FROM ALL_INDEXES WHERE TABLE_NAME = '名' 5、查看某个哪些列有索引。...SELECT * FROM ALL_IND_COLUMNS WHERE TABLE_NAME = '名' 如果在where 子句中有OR 操作符或单独引用复合索引列的后面列则将不会走索引,将会进行全扫描

3.7K20

MySQL索引组织

MySQL索引组织 今天没怎么学习,简单写下MySQL里面innodb存储引擎下的索引组织吧。...在Innodb存储引擎中,都是根据主键的顺序组织存放的,这种存储方式的称之为索引组织,在innodb存储引擎中,每张都有主键,也就是primary key,如果在创建的时候没有显式的制定主键,...那么innodb存储引擎会根据如下规则帮助我们选择或者创建主键: 1.首先判断中是否有飞空的唯一索引,如果有,则该列设置为主键; 2.如果没有,innodb存储引擎自动创建一个6字节大小的指针作为主键...3.当我们的中有多个唯一索引,innodb存储引擎会选择建的第一个定义的非空索引作为主键,需要注意的是,主键的选择根据的是定义索引的顺序,而不是建的顺序。...,这张包含a,b,c,d四个列b,c,d三个列上我们都创建了唯一索引,不同的是b的值可以为空,而c,d列都是唯一索引,而且不为空,上面的建表语句没有显式的定义主键,所以innodb存储引擎会帮我们自动选择非空的唯一索引

1.4K10
领券