mysql创建索引

mysql的索引,事务,引擎

匿名 (未验证) 提交于 2019-12-02 21:59:42
索引: 1、普通索引: create index 自定义索引名称 on 库名.表名(表中的字段); 如:create index student on aa.学生表(学号); 2、唯一性索引: create unique index 自定义索引名称 on 库名.表名(表中的字段); 如:create unique index tudent on aa.学生表(学号); 注:删除索引 DROP INDEX 索引名称 ON 表名 3、主键索引: create table 表名(字段1,字段2……,PRIMARY KEYS(前面的某个字段)); alter table 库名.表名 add PRIMARY KEYS(表的某个字段); 如:create table studentss(id int(4), name char(6),age int(4),PRIMARY KEY(id)); 如:alter table studentss add primary key(id) 注:主键索引和唯一性索引的区别是,唯一性索引可以允许有空值。 注: 删除主键 如果一个主键是自增长的,不能直接删除该列的主键索引, 应当先取消自增长,再删除主键特性 alter table 表名 drop primary key; 【如果这个主键是自增的,先取消自增长.】 具体方法如下: alter table

MySQL面试题

匿名 (未验证) 提交于 2019-12-02 21:59:42
1. 如何设计一个高并发的系统 ① 数据库的优化,包括合理的事务隔离级别、SQL语句优化、索引的优化 ② 使用缓存,尽量减少数据库 IO ③ 分布式数据库、分布式缓存 ④ 服务器的负载均衡 2. 锁的优化策略 ① 读写分离 ② 分段加锁 ③ 减少锁持有的时间 ④ 多个线程尽量以相同的顺序去获取资源 等等,这些都不是绝对原则,都要根据情况,比如不能将锁的粒度过于细化,不然可能会出现线程的加锁和释放次数过多,反而效率不如一次加一把大锁。这部分跟面试官谈了很久 3. 索引的底层实现原理和优化 B+树,经过优化的B+树 主要是在所有的叶子结点中增加了指向下一个叶子节点的指针,因此InnoDB建议为大部分表使用默认自增的主键作为主索引。 ① 以“%”开头的LIKE语句,模糊匹配 ② OR语句前后没有同时使用索引 ③ 数据类型出现隐式转化(如varchar不加单引号的话可能会自动转换为int型) order by要怎么处理 alter尽量将多次合并为一次 insert和delete也需要合并 等等 6. 实践中如何优化MySQL 我当时是按以下四条依次回答的,他们四条从效果上第一条影响最大,后面越来越小。 ① SQL语句及索引的优化 ② 数据库表结构的优化 ③ 系统配置的优化 ④ 硬件的优化 变种极多,攻击简单,危害极大 未经授权操作数据库的数据 恶意纂改网页

SQL优化指南

匿名 (未验证) 提交于 2019-12-02 21:59:42
慢查询日志 开启撒网模式 开启了MySQL慢查询日志之后,MySQL会自动将执行时间超过指定秒数的SQL统统记录下来,这对于搜罗线上慢SQL有很大的帮助。 SHOW VARIABLES LIKE 'slow%' 以我刚安装的mysql5.7为例 查询结果是这样子的:    slow_launch_time :表示如果建立线程花费了比这个值更长的时间,slow_launch_threads 计数器将增加    slow_query_log :是否开启慢查询日志 ON开启,OFF关闭 默认没有开启    slow_query_log_file :日志保存路径 SHOW VARIABLES LIKE 'long%'    long_query_time :达到多少秒的sql就记录日志 客户端可以用set设置变量的方式让慢查询开启,但是个人不推荐,因为真实操作起来会有一些问题,比如说,重启MySQL后就失效了,或者是开启了慢查询,我又去改变量值,它就不生效了。 编辑MySQL的配置文件: vim / etc / my . cnf 加入如下三行:    slow_query_log = ON   slow_query_log_file = /var/ lib / mysql / localhost - centos - slow . log   long_query_time = 3

MySQL聚簇索引

匿名 (未验证) 提交于 2019-12-02 21:59:42
MySQL作为迭代了很多个版本的数据库。在数据库的索引上实现了很多的优化版本,从一开始的只允许一个表有一个列为索引值,到目前版本可支持多个列建立索引值,更多关于索引优化版本的描述,以后有机会笔者再写一篇文章。本文主要介绍索引当中的聚簇索引。 MySQL官方对聚簇索引的定义是,聚簇索引并不是一种单独的索引类,而是一种数据存储方式,第一次看到这段描述,我相信很多人都会一头雾水,索引是一种数据存储结构?这怎么解释?下面笔者一步一步来讲述MySQL对聚簇索引的定义和具体运用。 首先上贴一张图 在MySQL中,有一列值,专门被设定为聚簇索引,这列值就是主键,通常为数字类型的字段。那么如果数据表中没有主键呢?MySQL的解决办法是隐式地将一个唯一的非空的列定义为聚簇。那如果这也没有呢?MySQL就自己创建一个聚簇索引,具体这个聚簇索引内部是怎么建立的,笔者还需要去学习学习。反正无论如何,MySQL都会创建一个聚簇索引。 那么为什么说聚簇索引是一种数据存储结构呢?原因是MySQL将索引(即主键)对应的每一条记录都以链表的形式存储在索引的叶子页中,那么很容易理解,聚簇索引就是表,而反过来说,表以聚簇索引的形式来存储。那么是所有的MySQL存储引擎都采用聚簇索引这种数据存储结构吗?答案是否定的,在MySQL中,只用Innodb引擎才采用聚簇索引,其他的存储引擎像MyISAM采用非聚簇索引。

MYSQL数据库开发规范

巧了我就是萌 提交于 2019-12-02 19:15:34
MYSQL数据库开发规范 (一) 建表规约 1.【推荐】表达是与否概念的字段,必须使用 is_xxx 的方式命名,数据类型是 unsigned tinyint ( 1 表示是,0 表示否)。 说明:任何字段如果为非负数,必须是 unsigned。 正例:表达逻辑删除的字段名 is_deleted,1 表示删除,0 表示未删除。 2.【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只 出现数字。数据库字段名的修改代价很大,因为无法进行预发布,所以字段名称需要慎重考虑。 说明:MySQL 在 Windows 下不区分大小写,但在 Linux 下默认是区分大小写。因此,数据库 名、表名、字段名,都不允许出现任何大写字母,避免节外生枝。 正例:mer_category,pub_area,level3_name 反例:mercategory,pubarea,level_3_name 3.【强制】表名不使用复数名词。 说明:表名应该仅仅表示表里面的实体内容,不应该表示实体数量,对应于DO类名也是单数形式,符合表达习惯。 4.【强制】禁用保留字,如desc、range、match、delayed 等,请参考 MySQL 官方保留字。 5.【强制】主键索引名为 pk_字段名;唯一索引名为 uniq_字段名;普通索引名则为 idx_字段名。 说明:pk_ 即

mysql基础

怎甘沉沦 提交于 2019-12-02 18:35:11
1、描述视图,存储过程,函数,触发器分别是什么并实践 视图(view)是一种虚拟存在的表,是一个逻辑表,本身并不包含数据。表现为对实体表的查询结果,查完之后存储在视图。方便下次查询   通过视图,可以展现基表的部分数据;视图数据来自定义视图的查询中使用的表,使用视图动态生成。 创建视图 create view v_students as select stuid,name,age from students; 创建视图,将查询结果存储成视图。可方便查询 原始表 视图生成的表 查看表状态。comment表示了是view表。表示为视图 函数 create function hello() returns varchar(20) return "hello world!"; 创建一个无参数的函数。返回字符串。具体返回为 hello world 实现一个打印字符串功能 查看函数定义 创建有参数的函数 MariaDB [hellodb]> delimiter // #将命令执行;号变成 //方便区分。在定义函数内部要执行的命令时。如果出现;号将不会执行 MariaDB [hellodb]> create function del(uid int unsigned) returns varchar(20) #创建函数。添加一个个uid参数,并指定类型为数字。返回结果为字符串 -> begin

阿里巴巴开发手册五

蹲街弑〆低调 提交于 2019-12-02 18:18:17
四、安全规约 1、【强制】隶属于用户个人的页面或者功能必须进行权限控制校验。 2、【强制】用户敏感数据禁止直接展示,必须对展示数据进行脱敏。 3、【强制】用户输入的 SQL 参数严格使用参数绑定或者 METADATA 字段值限定,防止 SQL 注入, 禁止字符串拼接 SQL 访问数据库。 4、【强制】用户请求传入的任何参数必须做有效性验证。 忽略参数校验可能导致: page size过大导致内存溢出 恶意order by导致数据库慢查询 任意重定向 SQL注入 反序列化注入 正则输入源串拒绝服务ReDoS 5、【强制】禁止向 HTML 页面输出未经安全过滤或未正确转义的用户数据。 6、【强制】表单、AJAX 交必须执行 CSRF 安全过滤。 CSRF(Cross-site request forgery)跨站请求伪造是一类常见编程漏洞。对于存在 CSRF 漏洞的应用/网站,攻击者可以事先构造好 URL,只要受害者用户一访问,后台便在用户 不知情情况下对数据库中用户参数进行相应修改。 7、【强制】在使用平台资源,譬如短信、邮件、电话、下单、支付,必须实现正确的防重放限制, 如数量限制、疲劳度控制、验证码校验,避免被滥刷、资损。 8、【推荐】发贴、评论、发送即时消息等用户生成内容的场景必须实现防刷、文本内容违禁词过 滤等风控策略。 五、MySQL数据库 (一)建表规约 1、【强制

百万级数据库优化方案数据库SQL优化大总结

谁都会走 提交于 2019-12-02 16:56:59
一、百万级数据库优化方案 1.对查询进行优化,要尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 最好不要给数据库留NULL,尽可能的使用 NOT NULL填充数据库. 备注、描述、评论之类的可以设置为 NULL,其他的,最好不要使用NULL。 不要以为 NULL 不需要空间,比如:char(100) 型,在字段建立时,空间就固定了, 不管是否插入值(NULL也包含在内),都是占用 100个字符的空间的,如果是varchar这样的变长字段, null 不占用空间。 可以在num上设置默认值0,确保表中num列没有null值,然后这样查询: select id from t where num = 0 3.应尽量避免在 where 子句中使用 != 或 <> 操作符,否则将引擎放弃使用索引而进行全表扫描。 4.应尽量避免在 where 子句中使用 or 来连接条件,如果一个字段有索引,一个字段没有索引,将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or Name = 'admin' 可以这样查询:

mysql中的key和index 理解

依然范特西╮ 提交于 2019-12-02 16:23:09
mysql的key和index多少有点令人迷惑,这实际上考察对数据库体系结构的了解的。 1 key 是数据库的物理结构,它包含两层意义,一是约束(偏重于约束和规范数据库的结构完整性),二是索引(辅助查询用的)。包括primary key, unique key, foreign key 等。 primary key 有两个作用,一是约束作用(constraint),用来规范一个存储主键和唯一性,但同时也在此key上建立了一个index; unique key 也有两个作用,一是约束作用(constraint),规范数据的唯一性,但同时也在这个key上建立了一个index; foreign key也有两个作用,一是约束作用(constraint),规范数据的引用完整性,但同时也在这个key上建立了一个index; 可见,mysql的key是同时具有constraint和index的意义,这点和其他数据库表现的可能有区别。(至少在oracle上建立外键,不会自动建立index),因此创建key也有如下几种方式: (1)在字段级以key方式建立, 如 create table t (id int not null primary key); (2)在表级以constraint方式建立,如create table t(id int, CONSTRAINT pk_t_id PRIMARY

大白话关系型数据库:索引,事务,锁

て烟熏妆下的殇ゞ 提交于 2019-12-02 16:04:40
感谢阅读。也欢迎大家可以去看《MySQL技术内幕》和橘黄色的《算法》。 前言 数据库 是软件开发的核心,因为一个软件如果要有状态,也就是它记得你什么时候操作过什么,那么数据要持久化,总要存储在某些地方,这些地方也就是数据库。当然,计算机上面的文件夹,文件,你也可以把它当成数据库,也就是文件数据库,现在很火的hadoop大数据系统其实就是一个分布式文件数据库。 在没有计算机的年代,记账相关的财务都是用纸来记录的,叫账本。而现在,我们有了计算机,有了编程语言,有了数据库系统,所以我们可以编程,将数据插入数据库,查找出数据库中的数据。 历史的选择,关系型数据库因为很符合人的直觉,所以使用的范围最广。顾名思义,关系型数据库,就是数据之间是有关系约束。在这篇文章中, 关系型数据库 这个词指的是持久化的数据组织形式的综合体,而 关系型数据库管理系统 指的是操纵这些数据组织形式综合体的软件组合。一个是数据本身,一个是操纵数据软件本身。 大白话 关系型数据库,可以包含很多个二维化的数据结构,叫做表,有行列之分,就像棋盘一样。列是字段,比如性别,年龄,姓名,行是一行行记录: 表1: 人口登记表 编号 性别 年龄 姓名 1 男 22 大大 2 女 34 次奥 非常的直观。 每一行记录可以有个主键,不可重复,比如编号,用以区分这行记录。还可以多个表之间有关系约束,叫做外键: 表2: 资产表 编号