mysql创建索引

MySQL 主键 外键 索引

匿名 (未验证) 提交于 2019-12-02 22:06:11
主键: 外键:   假如某个电脑生产商,它的数据库中保存着整机和配件的产品信息。用来保存整机产品信息的表叫做 Pc;用来保存配件供货信息的表叫做Parts。   在Pc表中有一个字段,用来描述这款电脑所使用的CPU型号;   在Parts 表中相应有一个字段,描述的正是CPU的型号,我们可以把它想成是全部CPU的型号列表。   很显然,这个厂家生产的电脑,其使用的CPU一定是供货信息表(parts)中存在的型号。这时,两个表中就存在一种约束关系(constraint)――Pc表中的CPU型号受到Parts 表中型号的约束。   首先我们来创建 parts 表: CREATE TABLE parts ( ... 字段定义 ..., model VARCHAR(20) NOT NULL, ... 字段定义 ... );   接下来是Pc表: CREATE TABLE pc ( ... 字段定义 ..., cpumodel VARCHAR(20) NOT NULL, ... 字段定义 ... };   设置索引   若要设置外键,在参照表(referencing table,即Pc表) 和被参照表 (referenced table,即parts表) 中,相对应的两个字段必须都设置索引(index)。   对Parts表:   ALTER TABLE parts ADD INDEX

性能优化之MySQL(Structured Query Languag)

匿名 (未验证) 提交于 2019-12-02 22:06:11
首先mysql结构图 : ODBC。    Management Serveices & Utilities:系统管理和控制工具集合,例如备份还原,安全复制等功能。    Connection Pool:连接池,用于管理缓冲用户连接,线程处理等需要缓存的需求。 from就是调用SQL Interface。    Parser:解析器,用于SQL命令传递到解析器的时候会被解析器验证和解析。解析器是由Lex和 YACC实现的,是一个很长的脚本。    Optimizer:查询优化器,用于SQL语句在查询之前会使用查询优化器对查询进行优化。他使用的 是“选取-投影-联接”策略进行查询。    Cache和Buffer:查询缓存,如果查询缓存有命中的查询结果,查询语句就可以直接去查询缓存中 取数据。这个缓存机制是由一系列小缓存组成的。比如表缓存,记录缓存,key缓存,权限缓存 等。    Engine:存储引擎,存储引擎是MySql中具体的与文件打交道的子系统。也是Mysql最具有特色 的一个地方。Mysql的存储引擎是插件式的。它根据MySql提供的文件访问层的一个抽象接口来 定制一种文件访问机制(这种访问机制就叫存储引擎)。现在有很多种存储引擎,各个存储引擎的 优势各不一样,最常用的MyISAM,InnoDB,BDB SQL执行顺序: MyISAM,InnoDB区别: 一

mysql性能优化

匿名 (未验证) 提交于 2019-12-02 22:06:11
数据库的操作越来越成为整个应用的性能瓶颈了,这点对于Web应用尤其明显。关于数据库的性能,这并不只是DBA才需要担心的事,而这更是我 们程序员需要去关注的事情 1.为查询缓存优化你的查询 mysql > show variables like ' %query_cache% ' ; (query_cache_type 为 ON 表示已经开启) + -- ----------------------------+----------+ | Variable_name | Value | + -- ----------------------------+----------+ | have_query_cache | YES | | query_cache_limit | 1048576 | | query_cache_min_res_unit | 4096 | | query_cache_size | 20971520 | | query_cache_type | ON | | query_cache_wlock_invalidate | OFF | + -- ----------------------------+----------+ 如果不是ON,修改配置文件以开启查询缓存: > vi / etc / my.cnf [ mysqld ] 中添加: query_cache

MySQL高级学习笔记

匿名 (未验证) 提交于 2019-12-02 22:06:11
1.二进制日志log-bin(主要用于主从复制) 2.错误日志log-error(默认是关闭的,记录严重的警告和错误信息,每次启动和关闭的详细信息等) 3.查询日志log(默认是关闭的,记录查询的sql语句,如果开启会减低mysql的整体性能,因为记录日志也是需要消耗系统资源) 4.数据文件(目录/var/lib/mysql,frm文件存放表结构,myd文件存表表数据,myi文件存放表索引) mysql读sql从from开始解析,重组。 第一层客户端连接层 第二层管理服务层(包含连接池、sql接口、解析器&转化器、优化器、缓冲器) 第三层可拔插的数据库引擎层 第四层 文件系统存储层 总结 :和其他数据库相比,MySQL有点与众不同,他的架构可以在多种不同场景中应用并发挥良好作用。主要体现在存储引擎的 架构上, 插件式的存储引擎架构将查询处理和其他的系统任务以及数据的存储提取相分离 。这种架构可以根据业务的需求和实际需要选 择合适的存储引擎。 块1包含数据项17和35,包含指针P1、P2、P3,P1表示小于17的磁盘块,P2表示17和25之间的磁盘块,P3表示大于35的磁盘块。 真实的数据存在于叶子节点 即3、5、9、10、15、28、29、36、60、75、79、90、99。 非叶子节点不存储真是的数据,只存储指引搜索方向的数据项 ,如17、35并不真是存在于数据表中。

MySQL SQL语句优化技巧

匿名 (未验证) 提交于 2019-12-02 22:06:11
http://cda.pinggu.org/view/22613.html MySQL SQL语句优化技巧 1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。 2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。 3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null 可以在num上设置默认值0,确保表中num列没有null值 ,然后这样查询: select id from t where num=0 4、尽量避免在 where 子句中使用 or 来连接条件,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num=10 or num=20 可以这样查询: select id from t where num=10 union all select id from t where num=20 5、下面的查询也将导致全表扫描:(不能前置百分号) select id from t where name like ‘%c%’ 若要提高效率,可以考虑全文检索。 6、in 和 not in 也要慎用,否则会导致全表扫描

MySQL 创建唯一索引忽略对已经重复数据的检查

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL 创建唯一索引忽略对已经重复数据的检查 # 重复数据 mysql> select aid,count(aid) as total ,email,tel_no,account_type,exten,passwd from fudao_admin group by user_name having total> 1; +-------+-------+--------------------------+--------+--------------+-------+----------------------------------+ | aid | total | email | tel_no | account_type | exten | passwd | +-------+-------+--------------------------+--------+--------------+-------+----------------------------------+ | 256 | 5 | | | 0 | | | | 4712 | 2 | bin.liu@wenba100.com | 0 | 0 | | 1afc079897c2de73022540f7c31db632 | | 1070 | 2 | feng.wang@wenba100.com | | 0 |

mysql优化(二)

匿名 (未验证) 提交于 2019-12-02 22:06:11
索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存。如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记录,直至找到符合要求的记录。表里面的记录数量越多,这个操作的代价就越高。如果作为搜索条件的列上已经创建了索引,MySQL无需扫描任何记录即可迅速得到目标记录所在的位置。如果表有1000个记录,通过索引查找记录至少要比顺序扫描记录快100倍。 主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是,我们也可以通过修改表的方式加入主键,例如“ALTER TABLE tablename ADD PRIMARY KEY (列的列表); ”。每个表只能有一个主键。 创建主键索引 主键是一种唯一性索引,但它必须指定为“PRIMARY KEY”。如果你曾经用过AUTO_INCREMENT类型的列,你可能已经熟悉主键之类的概念了。主键一般在创建表的时候指定,例如“CREATE TABLE tablename ( [...], PRIMARY KEY (列的列表) ); ”。但是

MySQL高级部分笔记

匿名 (未验证) 提交于 2019-12-02 22:06:11
有关于MySQL的高级部分笔记 这是一篇关于 MySQL 高级部分的笔记主要是,sql优化以及mysql锁的相关内容,以及主从配置等内容等比较基础的优化 一、逻辑架构部分 逻辑架构 逻辑架构介绍图如下        连接层:最上层是一些客户端和连接服务,包含本地的sock通讯大多时基于客户端/服务端工具实现的类似于tcp/ip的通讯 服务层:完成大多数的核心服务的功能,如,SQL接口,并完成缓存的查询SQL的分析和优化以及部分内置函数的执行,所有款存储引擎的功能 引擎层:存储引擎真正的负责了MySQL中的数据的存储和提取,服务器通过api与存储引擎进行通讯,常用的有MyISAM和InnoDB 存储层:数据存储在裸设备上,并完成与存储引擎的交互 优化主要是只使SQL的解析格式符合优化器的优化格式 存储引擎 查看mysql的存储引擎命令 # 看你的mysql提供了生么存储引擎show engines;# 看当前默认的存储引擎show variables like '%storage_engine%'; MyISAM与InnoDB的对比如下表 对比项 MyISAM InnoDB 主外键 不支持 支持 事务 不支持 支持 行表锁 表锁,即使操作一条记录也会锁住整个表, 不适合高并发的操作 行锁,操作时只锁某一行,不对其他的行有影响, 适合高并发的操作 缓存 只缓存索引不缓存真实数据

MySQL 建索引时 Specified key was too long; max key length is 767 bytes 错误的处理

匿名 (未验证) 提交于 2019-12-02 22:06:11
MySQL 建索引时 Specified key was too long; max key length is 767 bytes 错误的处理 2019年02月28日 18:04:48 日薪灬越亿 阅读数 674 更多 分类专栏: mysql 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/a1173537204/article/details/88039245 先检查一下是不是数据库被限制了索引的大小 SHOW variables like 'innodb_large_prefix' 如果查询的值是OFF的话 执行下面命令 SET GLOBAL INNODB_LARGE_PREFIX = ON; 执行完了 之后 还得查看当前的innodb_file_format引擎格式类型是不是BARRACUDA 执行 SHOW variables like 'innodb_file_format' 如果不是的话则需要修改 SET GLOBAL innodb_file_format = BARRACUDA; 创建表的时候指定表的 row format 格式为 Dynamic 或者 Compressed,如下示例: create table idx_length_test_02 (

MySQL(五)

匿名 (未验证) 提交于 2019-12-02 22:06:11
数据备份 数据导出 先退出mysql环境 数据的导出 备份表: 格式:mysqldump -uroot -p 库名 表名>表名.sql 备份库: 格式: mysqldump -uroot -p 库名>备份文件名.sql 数据的导入: Mysql -uroot -p 库名 < 备份文件地址.sql 用户与授权 创建用户 格式: create user '用户名'@'ip地址' identified by '密码' 创建用户名为lisi 任何位置都可以登录: Create user ‘lisi’@’%’ identified by ‘123456’ 创建用户wangwu 只能本地登录的用户 Create user ‘wangwu’@’localhost’ identified by ‘123456’; 创建用户wzy只能在ip地址为10.10.107.85的设备上链接数据库 create user 'wzy'@'10.10.107.85' identified by '123456'; 授权 格式:grant 权限 on 库名.表名 to 用户名@‘地址’ 给李四添加 所有库所有表的 查询权限 Grant select on *.* to ‘lisi’@’%’ 给远程连接的zhaoliu用户添加对demo1数据库下所有表的所有权限 Grant all on demo1.* to