SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。在使用它时,只需要发出“做什么”的命令,“怎么做”是不用使用者考虑的。SQL功能强大、简单易学、使用方便,已经成为了数据库操作的基础,并且现在几乎所有的数据库均支持SQL。 当我们掌握了Mysql的基本操作,比如建表语句,简单的sql语句等,我们还可以对mysql本身做一些配置操作,甚至是对Mysql进行优化。1、mysql的配置文件。 在windows中是my.ini文件: 1)、log-bin:表示主从复制的日志文件,用于主从复制。 2)、log-error="SO3JFYNN8EW6GMO.err":表示错误日志。 3)、server-id=1:表示本机的序号为1。 4)、datadir=D:/mysql5.7/Data:存放数据库信息的目录, 2、mysql的架构从上到下分成四层: 1)、连接层:连接处理,授权认证,相关的安全方案。 2)、服务层:完成sql的优化,分析,缓存等功能。 3)、引擎层:负责存储和提取数据。 4)、存储层:数据存储层,主要将数据存储在文件系统之中,并完成与引擎的交互。 3、mysql引擎 1)查看使用的引擎: show engins或者show MYISAM和INNODB的比较 不支持主外键值对;支持 不支持事务;支持 表锁,不适合高并发;行锁,适合高并发 只缓存索引;缓存索引和数据,对内存要求更高 表空间小;表空间大 关注点在性能,更多情况下适合查询多的情况;关注点事务。 4、mysql性能优化下降原因 1)、查询语句写的烂 2)、索引失效 单值索引
create index idx_user_name on user(name) 复合索引 create index idx_user_name_email on user(name,email) 3)、查询有太多的join 4)、服务器调优及各个参数 5、mysql的执行顺序 机器从from开始读。 1)、内连接 select *from tableA A inner join tableB B on A.key=B.key。 2)、左外连接 select *from tableA A left join tableB B on A.key= B.key 当b没有的,用null补全。 3)、右外连接 select *from tableA A right join tableB B on A.key=B.key 当a没有时,用null补全 4)、左外连接,去除右表部分 select *from tableA A left join tableB B on A.key=B.key where B.key is null a的独有,这此时b的用null补齐,所以此时b是为空的。 5)、右外连接,去除左表部分 select *from tableA A right join tableB B on A.key = B.key where A.key is null 6)、全连接(可以采用两者相加)union 可以组合并去重 select *from tableA A left join tableB B on A.key=B.key union (select *from tableA A right join tableB B ) 7)、中心空出来
select *from tableA A left join tableB B on A.key=B.key where B.key is null union (select *from tableA A right join tableB B on A.key=B.key where A.key is null) 6、什么是索引 1)、索引是一种数据结构,在于提高查找效率。 排好顺序的快速查找数据结构。 数据库维护着满足特定算法的数据结构,这种数据结构以 某种方式指向数据,这样可以在这些数据结构上实现高级的超找 算法,这种数据结构称为索引。 BTREE索引(没有特殊指定的情况下) 频繁删改的字段,不适合建索引。 2)、优势 提高数据检索的效率,降低数据库的io成本 通过索引列对数据进行 排序,降低数据排序的成本,降低了cpu的消耗 3)、劣势 索引也是一张表,占磁盘空间。 更新表时要维护索引,会降更新效率。 索引只是一个提高效率的因素,建立索引需要花时间和精力。 4)、单值索引,只包含一个列,一张表可以有多个单值索引。 5)、唯一索引,索引列的值必须唯一,允许为空。 6)、复合索引,包含多个列。 7)、索引的相关操作 create index idx_user_name on user(name) alter user add index idx_user_name on (name) show index from user drop index idx_user_name on user 8)、索引结构 Hash索引 full-text全文索引 R-Tree 索引 BTree索引 : 7、哪些情况要创建索引: 1)、主建自动建立唯一索引 2)、频繁作为查询条件的字段应该创建索引 3)、查询中与其他表关联的字段,外建关系建立索引。 4)、频繁更新的字段,不适合创建索引 5)、where条件里用不到的字段补创建索引。 6)、单建或者组合索引的选择问题,在高并发下倾向于创建复合索引 7)、查询中排序的字段,排序的字段如果按照索引去访问,将提高效率 8)、查询中统计或者分组字段 8、哪些情况不需要创建索引: 1)、表记录太少 2)、经常增删的表 3)、数据重复且分布平均的字段。 9、性能分析: mysql query optimizer 以上是我总结的一些Mysql进阶的知识,希望对大家有所帮助。 相关文章: mysql基本语法 掌握PHP MySQL Where 子句 以上就是mysql的一些高级用法的详细内容,更多请关注php中文网其它相关文章!
学习教程快速掌握从入门到精通的SQL知识。
|