php面试专题---16.MySQL创建高性能索引考点 一.总结 一句话总结: 注意:只写精品 1.索引的基础? 类似书籍的目录:索引类似于书籍的目录,要想找到一本书的某个特定主题,需要先查找书的目录,定位对应的页码 索引->行号->数据:存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行 2.索引对性能的影响? 1.大大减少服务器需要扫描的数据量,大大提高查询速度,降低写的速度.占用磁盘 2.帮助服务器避免排序和临时表 3.将随机I/O变顺序I/…
MySQL索引 MySQL索引的基础和类型 索引的基础:索引类似于书籍的目录,要想找到一本书的某个特定篇章,需要查找书的目录,定位对应的页码 存储引擎使用类似的方式进行数据查询,先去索引当中找到对应的值,然后根据匹配的索引找到对应的数据行. 索引对性能的影响 大大减少服务器需要扫描的数据量 帮助服务器避免排序和临时表 将随机I/O变为顺序I/O 大大提高查询速度,降低写的速度,占用磁盘 索引的使用场景 对于非常小的表,大部分情况下全表扫描效率更高 中到大型表,索引非常有效 特大型的表,建立和使用…
参考<高性能MySQL>第3版 1 索引基础 1.1 索引作用 在MySQL中,查找数据时先在索引中找到对应的值,然后根据匹配的索引记录找到对应的数据行,假如要运行下面查询语句: 如果在uid在建有索引,则MySQL将使用该索引先找到uid为5的行,也就是说MySQL先在索引上按值进行查找,然后返回…
索引是存储引擎用于快速找到记录的一种数据结构.除了加速查找,索引在其他方面也有一些有用的属性.索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量逐渐增大时,性能则会急剧下降,索引优化应该是对查询性能优化最有效的手段了. 索引类型 B-Tree索引 使用术语"B-Tree",是因为MySQL在CREATE TABLE 和其他语句中也使用该关键字.但是底层的存储引擎也可能使用不同的…
1.创建索引基本语法格 在MySQL中,在已经存在的表上,可以通过ALTER TABLE语句直接为表上的一个或几个字段创建索引.基本语法格式如下: ALTER TABLE 表名 ADD [UNIQUE | FULLTEXT | SPATIAL] INDEX 索引名(字段名 [(长度)] [ASC | DESC]); 表名:是指需要创建索引的表的名称.该表必须是已经存在的,如果不存在,需要先创建.UNIQUE:可选.表示索引为唯一性索引.FULLTEXT:可选.表示索引为全文索引.SPATIAL:…
MySQL 创建唯一索引忽略对已经重复数据的检查 在创建唯一索引的基础上加上关键字"IGNORE "即可.(注意,经测试,在5.7版本已经不再支持该参数) # 重复数据 mysql; +-------+-------+--------------------------+--------+--------------+-------+----------------------------------+ | aid | total | email | tel_no | account_…
php面试专题---13.AJAX基础内容考点 一.总结 一句话总结: ajax对提升用户速度,缓解服务器压力方面也是很有可取之处的,毕竟传递的数据少了 1.AJAX基础概念? Asynchronous JavaScript and XML:通过在后台与服务器进行少量数据交换,AJAX可以使网页实现异步更新 2.AJAX工作原理? XMLHttpRequest是AJAX的基础:XMLHttpRequest 用于在后台与服务器交换数据 3.jQuery的AJAX操作? $(ele).load().…
php面试专题---2.常量及数据类型考点 一.总结 一句话总结: 变量为null和变量判断为false的情况需要仔细注意下 1.PHP中字符串可以使用哪三种定义方法以及各自的区别是什么? 单引号:不解析变量和一些转义字符,但是效率更高 双引号:解析变量和转义字符 heredoc和newdoc:用来处理大文本:Heredoc类似于双引号:Newdoc类似于单引号 单引号单引号效率更高单引号不能解析变量单引号不能解析转义字符,只能解析单引号和反斜线本身变量和变量.变量和字符串.字符串和字符串之间可…
1.索引的优点 索引可以让服务器快速地定位到表的指定位置.总结下来有三大优点: 索引大大减少了服务器需要扫描的数据量 索引可以帮助服务器避免排序和临时表 索引可以将随机I/O变为顺序I/O 2.高性能的索引策略 独立的列 我们通常会看到一些查询不当地使用索引,或者使得Mysql无法使用已有的索引,比如: SELECT ID FROM B WHERE ID + = ; Mysql无法解析这个方程式,我们应该养成简化where条件的习惯,下面是另一个常见错误: SELECT A FROM B TO_…
索引永远是最好的查询解决方案嘛? 索引并不总是最好的工具.总的来说,只有当索引帮助存储引擎快速查找到记录带来的好处大于其带来的额外工作(比如插入操作后索引的维护)时,索引才是高效的. 对于非常小的表:大部分情况下简单的全表扫描更高效. 中到大型表:索引非常高效. 特大型表:建立和使用索引的代价非常高,可以使用分库分表或分区技术代替. 高性能的索引策略 索引的选择性越高则查询效率越高 因为选择性高的索引可以让MySQL在查找时过滤掉更多的行.唯一索引的选择性是1,这是最好的索引选择性,性能也是最好…
在MySQL数据库中,创建复合索引的时候,不知道在创建过程中哪个列在前面,哪个列该在后面,用以下方式即可: select count(distinct first_name)/count(*) as first_name_selectivity,count(distinct last_name)/count(*) as last_name_selectivity,count(*)from actor\G mysql> select count(distinct first_name)/count…
索引,MySQL中也叫“键”,是存储引擎中用于快速找到记录的一种数据结构,具体的工作方式就像书本中的索引一样,但是具体的实现方式会有差别. 一.索引分类 B-Tree索引: 优点: MyISAM中,索引根据数据的物理位置引用被索引的行,InnoDB中根据主键引用被索引的行. B-Tree索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点开始进行搜索. B-Tree对索引列是顺序组织存储的,所以很适合查找范围数据. 一般来说,B-Tree可以按照某种方…
1.查看某个表中的索引 show index from 表名 2.为某个表创建索引 alter table 表名 add index 索引名(列名)    //此种方式创建一般的索引 alter table 表名 add unique 索引名(列名)  //创建唯一索引 3.删除某个表的索引 drop index 索引名 on 表名…
多台服务器使用一个数据库时,有时就会出现重复插入的情况,eg:people表中的姓名和身份证号 此时可以给姓名和身份证号创建唯一索引, 创建语句:alter table people add unique index(name,cardid); 创建后,平常的插入语句插入相同的name+cardid会报错, 因此在插入的时候,插入语句应该为:insert IGNORE into people...... 只要在Insert语句中加入IGNORE关键字即可,再次插入相同的name+cardid时,…
索引是一种特殊的文件(InnoDB 数据表上的索引是表空间的一个组成部分),它们 包含着对数据表里所有记录的引用指针. 普通索引(由关键字 KEY 或 INDEX 定义的索引)的唯一任务是加快对数据的访问速度. 普通索引允许被索引的数据列包含重复的值.如果能确定某个数据列将只包含彼 此各不相同的值,在为这个数据列创建索引的时候就应该用关键字 UNIQUE 把它 定义为一个唯一索引. 也就是说,唯一索引可以保证数据记录的唯一性. 主键,是一种特殊的唯一索引,在一张表中只能定义一个主键索引,主键用于…
要给t_video_prods表的video_id字段创建唯一所以,可以使用下面这条语句: alter table t_video_prods add UNIQUE INDEX `uniq_video_id_index`(`video_id`) COMMENT '爱奇艺id唯一索引'; 运行的时候报错: 内容: #失败原因: [Execute: Duplicate entry '733186700' for key 'uniq_video_id_index'] #SQL文本: alter tab…
1.索引基础 索引对于良好的性能非常关键.尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.但是不恰当的索引随着数据量的增加,也会使整个数据库的性能下降. 举个例子: ; 如果在id上建立索引,则Mysql会使用该索引找到id为5的行,也就是说,Mysql现在索引按值进行查找,然后返回所有包含该值的数据行.索引也可以包含一列或者多列,列的顺序也十分重要,因为Mysql只能高效地使用索引的最左前缀列. 索引优化应该是查询性能优化最有效的手段了,一个"最优"的索引有时比一个&quo…
聚蔟索引 聚蔟索引并不是一种单独的索引类型,而是一种数据存储方式.Innodb的聚蔟索引在同一结构保存了B-Tree索引和数据行. 当表有聚蔟索引时,它的数据行实际上存放在索引的叶子页中.下图展示了聚蔟索引中的记录是如何存放的.注意到,叶子页包含了行的全部数据,但是节点页只包含了索引列. 聚集的数据有一些重要的优点: 可以把相关的数据保存在一起.减少查找到ID后回行产生多一次的I/O 数据访问更快.聚蔟索引把数据页和索引保存在同一个B-Tree结构,比非聚蔟索引在查找数据时少一次回表查询 使用覆…
) not null); insert into city_demo(city) select city from city insert into city_demo(city) select city from city_demo ) select * from city; select * from city_demo; ) ) select count(DISTINCT city)/count(*) from city_demo select count(distinct city),c…
mysql中,字符串如何建立索引的(本文中截取一部分) 只对字符串的前几个字符进行索引.通过字符串的前几个字符我们已经能大概排序字符串了,剩下不能排序的可以通过遍历进行查找啊,这样只在B+树中存储字符串的前几个字符的编码,既节约空间,又减少了字符串的比较时间,还大概能解决排序的问题,何乐而不为,比方说我们在建表语句中只对name列的前10个字符进行索引可以这么写: CREATE TABLE person_info( name VARCHAR(100) NOT NULL, birthday DAT…
查看索引  show index from 数据库表名 alter table 数据库add index 索引名称(数据库字段名称) PRIMARY KEY(主键索引) ALTER TABLE `table_name` ADD PRIMARY KEY ( `column` ) UNIQUE(唯一索引) ALTER TABLE `table_name` ADD UNIQUE (`column`) INDEX(普通索引) mysql>ALTER TABLE `table_name` ADD INDE…
  当一个表有多条索引可走时,  Mysql  根据查询语句的成本来选择走哪条索引, 联合索引的话, 它往往计算的是第一个字段(最左边那个), 这样往往会走错索引. 如: 索引Index_1(Create_Time, Category_ID), Index_2(Category_ID) 如果每天的数据都特别多, 而且有很多category, 但具体每个category的记录不会很多. 当查询SQL条件为select -where create_time -.and category_id=..时…
CREATE TABLE text(id INT(20) COMMENT '主键',NAME VARCHAR(20) COMMENT '姓名',PASSWORD VARCHAR(20) COMMENT '密码',PRIMARY KEY(id) KEY indexname (NAME))ENGINE = INNODB AUTO_INCREMENT 1 DEFAULT CHARSET = utf8 COMMENT '字符串' //注释 PRIMARY KEY(id)//主键 auto_increme…
创建高性能索引 (一)索引简介 索引的定义 索引,在数据结构的查找那部分知识中有专门的定义.就是把关键字和它对应的记录关联起来的过程.索引由若干个索引项组成.每个索引项至少包含两部分内容.关键字和关键字对应记录在存储器位置信息.索引是组织磁盘文件的一种重要的技术. 数据库的数据量通常比较大,都是存储在磁盘上.通过存储引擎对磁盘文件的数据进行管理.而索引是存储引擎御用快速找到记录的一种数据结构. 2.索引的优点 (1)大大减少服务器需要扫描的数据量. (2)索引可以帮助服务器避免排序和临时表. (…
https://www.zhihu.com/question/36996520 之前对于联合索引有一个误区, 假设 name,age为一个联合索引 5条索引记录 a 10 b 5 c 12 c 15 d 2 当查找 where name='a' and age=10的时候能利用这个联合索引,为什么 where name>'a' and age=5 就只能使用到联合索引的部分索引,指第一个索引呢? 其实还是对联合索引的性质不熟悉,网上找了资料 mysql创建复合索引的规则是首先会对复合索引的最左边…
目录(技术文) 多关于索引,分为以下几点来讲解: 一.索引的概述(什么是索引,索引的优缺点) 二.索引的基本使用(创建索引) 三.索引的基本原理(面试重点) 四.索引的数据结构(B树,hash) 五.创建索引的原则(重中之重,面试必问!敬请收藏!) 六.百万级别或以上的数据如何删除 一.索引的概述 1)什么是索引? 索引是一种特殊的文件(InnoDB数据表上的索引是表空间的一个组成部分),它们包含着对数据表里所有记录的引用指针.更通俗的说,索引就相当于目录.当你在用新华字典时,帮你把目录撕掉了,…
php面试专题---Mysql索引原理及SQL优化 一.总结 一句话总结: 注意:只写精品 1.为表设置索引要付出代价 是什么? 存储空间:一是增加了数据库的存储空间 修改插入变动索引时间:二是在插入和修改数据时要花费较多的时间(因为索引也要随之变动) 2.在哪些列上面创建索引比较合适? 1.连接的列:在经常用在连接的列上,这些列主要是一些外键,可以加快连接的速度: 2.范围:在经常需要根据范围进行搜索的列上创建索引,因为索引已经排序,其指定的范围是连续的: 3.排序:在经常需要排序的列上创建索…
索引(index),在MySQL中也被叫做键(key),是存储引擎用于快速找到记录的一种数据结构.索引优化是对查询性能优化最有效的手段.   5.1 索引基础   索引的类型   索引是在存储引擎层而不是服务器层实现的.所以,并没有统一的索引标准:   B-Tree 索引   不同的存储引擎以不同的方式使用B-Tree索引,性能也各有不同:例如,MyISAM使用前缀压缩技术使得索引更小,而InnoDB则按照原数据格式进行存储.再如MyISAM索引通过数据的物理位置引用被索引的行,而InooDB则…
创建高性能的索引 1. 索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构. 2. 索引可以包含一个或多个列的值.如果索引包含多个列,那么列的顺序也十分重要,因为MySQL只能高效低使用索引的最左前缀列. 3. B-Tree索引:当人们谈论索引的时候,如果没有特别执行索引类型,那多半说是B-Tree索引,它使用B-Tree数据结构来存储数据.     1). 可以使用B-Tree索引的查询类型:          a. 全职匹配:全值匹配指的是和索引中…
本文系阅读<高性能MySQL>,Baron Schwartz等著一书中第五章 创建高性能的索引的笔记,索引是存储引擎用于快速找到记录的一种数据结构. 索引对于良好的性能非常关键,尤其是当表中的数据量越来越大时,索引对性能的影响愈发重要.在数据量较小且负载较低时,不恰当的索引对性能的影响可能还不明显,但当数据量逐渐增大时,性能则会急剧下降. 索引优化应该是对查询性能优化最有效的手段了.索引能够轻易将查询性能提高几个数量级,最优的索引有时比一个好的索引性能要好两个数量级. 索引基础 在mysql中…