mysql创建索引

<转>MySQL性能调优的10个方法

江枫思渺然 提交于 2020-03-18 14:30:50
文章原地址: http://mp.weixin.qq.com/s/oRXJRz_Y5drmIrcbxSKOcw 1. 选择合适的存储引擎: InnoDB 除非你的数据表使用来做只读或者全文检索 (相信现在提到全文检索,没人会用 MYSQL 了),你应该默认选择 InnoDB 。 你自己在测试的时候可能会发现 MyISAM 比 InnoDB 速度快,这是因为: MyISAM 只缓存索引,而 InnoDB 缓存数据和索引,MyISAM 不支持事务。 但是 如果你使用 innodb_flush_log_at_trx_commit = 2 可以获得接近的读取性能 (相差百倍) 。 1.1 如何将现有的 MyISAM 数据库转换为 InnoDB: mysql -u [USER_NAME] -p -e "SHOW TABLES IN [DATABASE_NAME];" | tail -n +2 | xargs -I '{}' echo "ALTER TABLE {} ENGINE=InnoDB;" > alter_table.sql perl -p -i -e 's/(search_[a-z_]+ ENGINE=)InnoDB//1MyISAM/g' alter_table.sql mysql -u [USER_NAME] -p [DATABASE_NAME] < alter_table

MySQL-事物、索引和视图

懵懂的女人 提交于 2020-03-18 13:56:23
1.视图 对于复杂的语句,多次使用时,要维护是一件很麻烦的事情。 解救的办法:就是定义一个视图,相当于编程语言中的封装。 定义视图 语法如下: create view v_student as select * from student where name = zhangsan; 调用: select * from v_student; 2.事物 当一件事情需要多个sql完成时,如果其中的某条语句出错,则希望整个操作都退回。 主要作用是保证命令的完整性。 2.1事物的四大特性 原子性:事物中的全部操作在数据库中是不可分割的,要么全部完成,要么都不完成。 一致性:几个并行执行的任务,其执行结果必须与按照某一顺序执行的结果一致。 隔离性:事物的执行不受其他事物的干扰,事物执行的结果对其他事物必须是透明的。 持久性:对于已经提交的事物,系统必须保证事物对该数据库的改变不曾丢失,即使数据库出现故障。 2.2 使用事物的情况 数据被更改时,包括insert、updata、del等操作进行时使用事物。 要求:表的类型必须是innodb或者bdb类型,才可以使用事物。 查看表的类型:show create table students; 修改表的类型:alter table 表名称 engine=innodb; 事物语句: 开启:begin; 提交:commit; 回滚:rollback; 2

浅谈mysql

安稳与你 提交于 2020-03-18 13:53:51
关于数据库其实我们可以简单的理解为存储货物的一个厂库,里面分别是按照一定的分类存放的物品,然后人们有时会从厂库中拿走或存储一些物品,有时也会更改或增加一些分类 这些物品都分门别类的存放在厂库中,方便人们的查询和存储。 MySQL是一个关系型数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在互联网行业。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多互联网公司选择了MySQL作为后端数据库。2008年MySQL被Sun公司收购,2010年甲骨文成功收购Sun公司。 MySQL数据库的优点: 1、多语言支持:Mysql为C、C++、Python、Java、Perl、PHP、Ruby等多种编程语言提供了API,访问和使用方便。 2、可以移植性好:MySQL是跨平台的。 3、免费开源。 4、高效:MySql的核心程序采用完全的多线程编程。 5、支持大量数据查询和存储:Mysql可以承受大量的并发访问。 由于本人最先接触到的数据库是oracle,在此谈论mysql说的有些命令或知识可能是oracle 上的,mysql可能不适用,见谅 首先先介绍下mysql的常用命令: 显示所有数据库:show databases; •选定默认数据库:use dbname; •显示默认数据库中所有表:show tables; •放弃正在输入的命令:\c

程序员看了都要收藏系列:Mysql进阶知识干货笔记!

房东的猫 提交于 2020-03-17 22:54:17
一、SQL执行顺序以及常见SQL的join查询 sql执行顺序 : 手写 SELECT DISTINCT <select_list> FROM <left table> <join type> JOIN <right_table> ON <join_codition> WHERE <where_condition> HAVING <having_condition> ORDER BY < order_by_condition> LIMIT < limit number> 机读顺序 1 FROM <left_table> 2 ON <join_condition> 3 <join_type> JOIN <right_table> 4 WHERE <where_condition> 5 GROUP BY <group by_list> 6 HAVING <having_condition> 7 SELECT 8 DISTINCT <select_list> 9 ORDER BY <order_by_condition> 10 LIMIT <limit_number> sql机器执行顺序 七种join关系 二、索引 1、什么是索引 索引是帮助MYSQL高效获取数据的数据结构-->排好序的快速查找数据结构 我们平时所说的索引,没有特别指明,都是指B树(多路搜索树,不一定是二叉)

数据库常见面试题(非DBA方向)

南楼画角 提交于 2020-03-17 11:47:07
数据库面试题总结之一 1.什么是事务?以及四个特性 事务(Transaction)是并发控制的基本单位。 所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。 事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。 ACID 原子性:要么执行,要么不执行,也就是不可再分,已经最小了。 隔离性:所有操作全部执行完以前其它会话不能看到过程。 一致性:事务前后,数据总额一致。 持久性:一旦事务提交,对数据的改变就是永久的 事物的语句: 1.开始事务:BEGIN TRANSACTION 2.提交事务:COMMIT TRANSACTION 3.回滚事务:ROLLBACK TRANSACTION 2.索引是什么?有哪些作用和优缺点 索引就一种特殊的查询表,数据库的搜索可以利用它加速对数据的检索。 它很类似与现实生活中书的目录,不需要查询整本书内容就可以找到想要的数据。 索引可以是唯一的,创建索引允许指定单个列或者是多个列。 缺点是它减慢了数据录入的速度,同时也增加了数据库的尺寸大小 MySQL数据库几个基本的索引类型:普通索引、唯一索引、主键索引、全文索引 索引加快数据库的检索速度 索引降低了插入、删除、修改等维护任务的速度 唯一索引可以确保每一行数据的唯一性 通过使用索引,可以在查询的过程中使用优化隐藏器,提高系统的性能

Mysql有哪些优化

久未见 提交于 2020-03-17 03:41:42
1.表的设计合理化 2.给搜索字段建立索引 索引提供了高效访问数据的方法,加快了查询的速度。使用所以可以快速的定位到表中的某条记录,从而提高数据库查询的速度,提高数据库的性能。如果查询的时候没有使用索引,查询语句将扫描表中的所有记录。在数据量大的情况下,这样查询的速度会很慢。如果使用索引进行查询,查询语句可以根据索引快速定位到待查询的记录,从而减少查询的记录数,达到提高查询速度的目的。 创建索引: 在执行CREATE TABLE语句时可以创建索引 ALTER TABLE 用来创建普通索引、唯一索引(UNIQUE)、主键索引(PRIMARY KEY)和全文索引(FULLTEXT) 如: ALTER TABLE 表名 ADD INDEX 索引名(字段名) ALTER TABLE 表名 ADD UNIQUE (字段名) ALTER TABLE 表名 ADD PRIMARY KEY (字段名) ALTER TABLE 表名 ADD FULLTEXT (字段名) 也可以使用CREATE创建索引 注意点 :不能用CREATE INDEX语句创建PRIMARY KEY索引 查看索引: show index from 表名 删除索引: drop index index_name on table_name 3.选择正确的存储引擎 Mysql常用的引擎: InnoDB引擎

MySQL-视图和索引

纵然是瞬间 提交于 2020-03-16 09:52:44
一、视图 视图是从一个或多个表中导出的表,是一种虚拟的表,其内容由查询语句定义。 视图是逻辑上来自一个或多个表的数据集合 视图一旦定义,就可以像表一样进行查询、修改和删除。 对视图引用的基础表来说,视图的作用类似于筛选。 视图的数据来自定义视图查询时引用的表,且在引用视图时动态生成。 为什么使用视图? 限制其他用户对数据库表的访问,因为视图可以有选择性的显示数据库表的一部分 容易实现复杂的查询 对于相同的数据可以产生不同的视图 1 、创建视图 Create view 视图名 [(列名1,列名2)] as select语句 创建视图时,所引用的表尽量<=3,为保证执行效率 范例1:CREATE VIEW emp11 AS SELECT * FROM emp; 范例2:CREATE VIEW emp10 as SELECT * FROM emp WHERE deptno=10; 范例3:CREATE VIEW emp20(no,name) as SELECT empno, ename FROM emp; 范例4:CREATE VIEW emp02(no,name,deptno,dname) as SELECT empno, ename, d.deptno,dname FROM emp e, dept d WHERE e.deptno = d.deptno AND loc =

php+中文分词scws+sphinx+mysql打造千万级数据全文搜索

纵然是瞬间 提交于 2020-03-15 11:36:55
Sphinx是由俄罗斯人Andrew Aksyonoff开发的一个全文检索引擎。意图为其他应用提供高速、低空间占用、高结果 相关度的全文搜索功能。Sphinx可以非常容易的与SQL数据库和脚本语言集成。当前系统内置MySQL和PostgreSQL 数据库数据源的支持,也支持从标准输入读取特定格式 的XML数据。 Sphinx创建索引的速度为:创建100万条记录的索引只需3~4分钟,创建1000万条记录的索引可以在50分钟内完成,而只包含最新10万条记录的增量索引,重建一次只需几十秒。 Sphinx的特性如下: a) 高速的建立索引(在当代CPU上,峰值性能可达到10 MB/秒); b) 高性能的搜索(在2 – 4GB 的文本数据上,平均每次检索响应时间小于0.1秒); c) 可处理海量数据(目前已知可以处理超过100 GB的文本数据, 在单一CPU的系统上可处理100 M 文档); d) 提供了优秀的相关度算法,基于短语相似度和统计(BM25)的复合Ranking方法; e) 支持分布式搜索; f) 支持短语搜索 g) 提供文档摘要生成 h) 可作为MySQL的存储引擎提供搜索服务; i) 支持布尔、短语、词语相似度等多种检索模式; j) 文档支持多个全文检索字段(最大不超过32个); k) 文档支持多个额外的属性信息(例如:分组信息,时间戳等); l) 支持断词;

MySQL数据库优化(二)

别来无恙 提交于 2020-03-15 06:39:08
索引 索引是通过 BTREE 结构进行数据检索的,以平衡二叉树检索的方式缩短数据查询的时间。 索引类型 主键索引(primary),在innodb存储引擎下,由于数据和索引都在ibd文件里存储,所以数据的组织方式是由主键索引的 BTREE 结构,即聚簇索引,如果表没有主键系统会查找一列唯一数据列当主键,如果还没有唯一数据列,系统则虚拟主键索引。在innodb存储引擎下,其他索引都引用主键索引的地址,即非聚簇索引。 mysql> create table t1(id int primary key); #或 mysql> alter table t2 add primary key(id); 普通索引(normal) mysql> create index idx_name on t1(name); 唯一索引(unique) mysql> create table t1(id int unique); 全文索引(full)   由于MySQL默认的全文索引对中文的支持不好,所以通常使用别他工具来实现,比如:sphinx 或 coreseek 查询索引 mysql> show keys from table_name; mysql> show index from table_name; 删除索引 mysql> alter table table_name drop index

explain各字段含义

£可爱£侵袭症+ 提交于 2020-03-14 14:02:29
explain执行计划: 通过使用explain关键字可以模拟优化器执行SQL查询语句,从而知道MySQL是如何处理你的SQL语句的。分析你的查询语句或是表属性瓶颈。 通过explain + SQL语句: 表的读取顺序 数据读取操作的类型 哪些索引可以使用 哪些索引被实际使用 表之间引用 每张表有多少行被优化 1.id 通过id值可以知道sql语句执行顺序: id不同:如果是子查询,id的序号会递增,id值越大优先级越高,越先被执行 id有相同有不同: 情况1:id相同: id 相同,执行顺序由上至下执行 情况2:id有不同: 如果是子查询,id的序号会递增,id值越大优先级越高,越被执行。所以上例id=3先被执行,type=ALL做的是一个全表扫描 情况3:id有相同,有不同的: id 如果相同,可以认为是一组,从上至下顺序执行 在所有组中,id值越大,优先级越高,越先执行 2.select_type 根据此字段可以看到当前查询类型,select_type常用值: SIMPLE 简单的select查询,查询中不包含子查询或者UNION PRIMARY 查询中若包含任何复杂的子部分,最外层查询标记 SUBQUERY 在SELECT或WHERE列表中包含了子查询 DERIVED 在FROM列表中包含的子查询被标记为DERIVED(衍生),MySQL会递归执行这些子查询