表索引

1.什么是引用变量 PHP当中 用什么符号定义引用变量?
概念:不同的名字访问同一个变量的内容
定义方式:使用&符号
工作原理:


会话控制技术
Cookie和session的区别工作机制、存储位置、cookie优缺点
Session存储
session_set_save_handler()
MySQL、memcache、redis等
Redis 共享 解决 session 在一台服务器无法调用的问题


版本控制软件【Git】

集中式、发布式
CVS 、svn

PHP的运行原理
CGI协议
FastCGI 保留进程 一次可以处理多个进程

PHP-fpm 进程管理器

正则表达式的作用: 分割、查找、匹配、替换字符串
分隔符: 正斜线(/) 、hash符号(#) 、取反符号(~)

通用原子:
\d0-9
\D除了0-9
\w数字、字母、下划线
\W除了数字、字母、下划线
\s空白符
\S除了空白符

表引擎

区别:
myisam不支持事务处理 innodb支持事物处理
2、myisam 不支持外键 innodb支持外键
3、myisam 读取速度快 innodb写数据快
4、myisam 是我们的行级结构
innodb是我们的二叉树结构

innoDB表引擎

默认事务型引擎,最重要最广泛的存储引擎,性能非常优秀
数据存储在共享表空间,可以通过配置分开
对主键查询的性能高于其他类型的存储引擎
内部做了很多优化,从磁盘读取数据时自动在内存构建hash(哈希)索引,插入数据时自动构建插入缓冲区
通过一些机制和工具支持真正的热备份
支持崩溃后的安全恢复
支持行级锁
支持外键


myisam表引擎

5.1版本前,myisam是默认的存储引擎
拥有全文索引、压缩、空间函数
不支持事务和行级锁,不支持崩溃后的安全恢复
表存储在俩个文件,MYD\MYI
设计简单下的场景下性能很好


其他表引擎

Archive、Blackhole、CSV 、MEmory
优先使用innoDB


MySQL锁机制

当多个查询同一时刻进行数据修改时,就会产生并发送控制的问题
共享锁和排他锁 也就是读锁和写锁
读锁: 共享锁,不堵塞,多个用户可以同时读一个资源,互不相干
写锁: 排他的,一个写锁会堵塞其他的写锁和读锁,这样可以只容许一个人进行写入,防止其他用户读取正在写入的资源。


锁粒度
表锁,系统性能开销最小,会锁定整张表,myisam所用的就是表锁
行锁,最大程度的支持并来发处理,但是也带来了最大的锁开销,InnoBD实现行级锁


MySQL事务处理

MySQL提供事务处理的表表引擎是innoDB
服务器层不管理事务,由下层的引擎实现,所以同一个事务中,使用多种存储引擎是不靠谱的 在非事务的表上执行事务操作myisam不会发出提醒,也不会报错


存储过程
为以后的使用而保存的一条或多条MySQL语句的集合
存储过程就是有业务逻辑和流程的集合
可以在存储过程中创建表、更新数据、删除数据等等


使用场景
通过把处理封装在容易使用的单元中,简化复杂的操作
保证数据的一致性
简化对变动的管理
MySQL索引的基础和类型


良性影响
大大减少服务器需要扫描的数据量
帮助服务器避免排序和临时表
将随机I/O变顺序I/O
大大提高查询速度,降低写的速度、占用磁盘
不良影响
降低写的速度(它会额外的去操作索引)、占用磁盘


索引的使用场景
对于非常小的表,大部分情况全盘扫描效率更高
中到大型的表,索引非常有效
特大型表,建立和使用索引的代价也将随知增长,可以使用分区技术来解决


索引类型

普通索引: 最基础的索引,没有任何约束限制
唯一索引: 与普通索引类似,但具有唯一性约束
主键索引: 特殊的唯一索引,不容许有空值


主键与唯一区别:
一个表只能有一个主键索引,可以有多个唯一索引
主键索引一定是唯一索引,唯一索引不一定是主键索引
主键可以与外键构成参照完整性约束,防止数据不一致

组合索引: 将多个列组合在一起创建索引,可以覆盖多个列
外键索引: 只有在InnoDB类型的表才可以使用外键索引,保证数据的一致性、完整性和实现级联的操作
全文索引: MySQL自带的全文索引只能用于myisam,并且只能对英文进行全文索引
MySQL索引的创建原则


最适合索引的列是出现where句子中的列,或者连接句子中的列而不是出现在selelct关键字后的列
索引列的基数越大,索引的效果越好
对字符串进行索引,制定一个前缀长度,可以节省大量的索引空间
根据情况创建复合索引,复合索引可以提高查询效率
避免创建过多索引,索引会额外占用磁盘空间,降低写操作效率
主键尽可能选择较短的数据类型,可以有效减少索引的磁盘占用提高查询效率


注意

  1. 复合索引遵循前缀原则
  2. Like查询,%不能在前面,可以使用全文索引
  3. Column is null 可以使用索引
  4. 如果MySQL估计使用索引会比全表扫描更慢,会放弃使用索引
  5. 如果or前的条件中的列有索引,后面的没有,索引都不会被用到
  6. 列类型是字符串,查询时一定要个值加引号,否则索引无效
例子:
 where  name=100    无效 
 where  name=100 ’ 有效
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值