当前位置: 首页 > news >正文

做js题目的网站seo的基本步骤是什么

做js题目的网站,seo的基本步骤是什么,工程施工管理平台,哪个网站可以做设计赚钱文章目录 1.聚簇索引 VS 非聚簇索引经典问题 2.索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引索引创建原则 1.聚簇索引 VS 非聚簇索引 之前介绍的将所有的数据都放在叶子节点的这种存储引擎对应的就是 InnoDB 默认存储表数据的存储结构。 …

文章目录

  • 1.聚簇索引 VS 非聚簇索引
    • 经典问题
  • 2.索引操作
    • 创建主键索引
    • 唯一索引的创建
    • 普通索引的创建
    • 全文索引的创建
    • 查询索引
    • 删除索引
    • 索引创建原则

1.聚簇索引 VS 非聚簇索引

之前介绍的将所有的数据都放在叶子节点的这种存储引擎对应的就是 InnoDB 默认存储表数据的存储结构。

下面我们简单介绍一下 MyISAM 存储引擎-主键索引。MyISAM 引擎同样使用B+树作为索引结果,叶节点的data域存放的是数据记录的地址。下图为MyISAM表的主索引,Col1 为主键。
在这里插入图片描述
其中,MyISAM 最大的特点是,将索引Page和数据Page分离,也就是叶子节点没有数据,只有对应数据的地址。相较于InnoDB 索引,InnoDB 是将索引和数据放在一起的。

--终端A
mysql> create database myisam_test;  --创建数据库
Query OK, 1 row affected (0.00 sec)
mysql> use myisam_test;Database changed
mysql> create table mtest(
-> id int primary key,
-> name varchar(11) not null
-> )engine=MyISAM;              --使用engine=MyISAM
Query OK, 0 rows affected (0.01 sec)--终端B
[root@-centos mysql]# ls myisam_test/ -al  --mysql数据目录下
total 28
drwxr-x---  2 mysql mysql 4096 Jun 13 13:33 .
drwxr-x--x 13 mysql mysql 4096 Jun 13 13:32 ..
-rw-r-----  1 mysql mysql   61 Jun 13 13:32 db.opt
-rw-r-----  1 mysql mysql 8586 Jun 13 13:33 mtest.frm   --表结构数据
-rw-r-----  1 mysql mysql    0 Jun 13 13:33 mtest.MYD   --该表对应的数据,当前没有数据,所以是0
-rw-r-----  1 mysql mysql 1024 Jun 13 13:33 mtest.MYI   --该表对应的主键索引数据

MyISAM 这种用户数据与索引数据分离的索引方案,叫做非聚簇索引

--终端A
mysql> create database innodb_test;       
Query OK, 1 row affected (0.00 sec)
mysql> use innodb_test;Database changed
mysql> create table itest(
-> id int primary key,
-> name varchar(11) not null
-> )engine=InnoDB;    --使用engine=InnoDB                
Query OK, 0 rows affected (0.02 sec)--创建数据库--终端B
[root@centos mysql]# ls innodb_test/ -altotal 120
drwxr-x---  2 mysql mysql  4096 Jun 13 13:39 .
drwxr-x--x 14 mysql mysql  4096 Jun 13 13:38 ..
-rw-r-----  1 mysql mysql    61 Jun 13 13:38 db.opt
-rw-r-----  1 mysql mysql  8586 Jun 13 13:39 itest.frm     --表结构数据
-rw-r-----  1 mysql mysql 98304 Jun 13 13:39 itest.ibd     --该表对应的主键索引和用户数据,虽然现在一行数据没有,但是该表并不为0,因为有主键索引数据

InnoDB 这种用户数据与索引数据在一起索引方案,叫做聚索引。当然,MySQL除了默认会建立主键索引外,我们用户也有可能建立按照其他列信息建立的索引,一般这种索引可以叫做辅助(普通)索引。
对于 MyISAM,建立辅助(普通)索引和主键索引没有差别,无非就是主键不能重复,而非主键可重复。下图就是基于 MyISAM 的 col2建立的索引,和主键索引没有差别。
在这里插入图片描述
InnoDB 除了主键索引,用户也会建立辅助(普通)索引,我们以上表中的Col3 建立对应的辅助索引如下图:
在这里插入图片描述

InnoDB 的非主键索引中叶子节点并没有数据,而只有对应记录的 key 值。

通过辅助(普通)索引,找到目标记录,需要两遍索引:首先检索辅助索引获得主键,然后用主键到主索引中检索获得记录。这种过程,就叫做回表查询!这种多个索引的就是一个表可以对应多个 B+树!
为何InnoDB 针对这种辅助(普通)索引的场景,不给叶子节点也附上数据呢?原因就是太浪费空间了。【没必要再搞一份重复的数据!】索引的本质:B+树

经典问题

mysql默认创建一列带有主键的列,那为什么插入无主键表时是无序的显示表仍然无序,不是有默认主键吗?

mysql默认的主键肯定不会按着你的想法来,他有自己的设置,你插入顺序怎样,显示就怎样。

那为什么查询还那么慢?

假设有abc三个字段,你没有设置主键,假设mysql默认使得d为隐藏主键,你用a去查就无法使用d的索引结构,只能线性遍历,所以很慢。【经过了解,一棵树可能有多个索引,一个索引本质就是一个数据结构实例,主键索引/普通索引】为了讲解清楚,通常把整颗b+树呈现给你,但实际上,查询数据时是按需加载!即用哪个加载哪个结点

叶子节点全部用链表级联起来 a.首先,这是b+的特点 b.我们比较希望进行范围查找

是mysql用了B+结构,B+结构是非叶子节点不相连,叶子节点相连;
一段数据/一张page中数据连续。

理解curd

对mysql内部的数据等做操作(CURD)的时候,本质其实就是操作文件内容。

文件必须先被打开,对文件内容做任何操作,都不是直接在磁盘设备上做操作的!任何磁盘数据,在进程中要进行操作,本质都必须在内存中进行!如果数据不在内存中呢?换入,换出【磁盘到内存,内存到磁盘】mysql内部一定要有自己的内存管理。mysql自己启动的时候,要预先申请一批内存空间。

索引覆盖

在这里插入图片描述

复合索引,通常用于{a,b}:用a找b,即不再通过ab找到主键key(普通索引存的不是数据而是主键),继而通过key找b:覆盖了主键索引。不能拿b找a,因为匹配时都是1从左向右:索引最左匹配原则

2.索引操作

创建主键索引

第一种方式-- 在创建表的时候,直接在字段名后指定 primary key

 create table  user1(id int primary key, name varchar(30));

第二种方式:-- 在创建表的最后,指定某列或某几列为主键索引

create table  user2(id int, name varchar(30), primary key(id)); 

第三种方式:-- 创建表以后再添加主键

create table  user3(id int, name varchar(30));
alter table user3 add primary key(id);

主键索引的特点:

一个表中,最多有一个主键索引,当然可以有复合主键(复合主键也是一个主键,只不过主键由两个字段构成)。
主键索引的效率高(主键不可重复)。
创建主键索引的列,它的值不能为null,且不能重复。
主键索引的列基本上是int。

唯一索引的创建

第一种方式-- 在表定义时,在某列后直接指定unique唯一属性。

create table user4(id int primary key, name varchar(30) unique);

第二种方式-- 创建表时,在表的后面指定某列或某几列为unique

 create table user5(id int primary key, name varchar(30), unique(name));

第三种方式

create table user6(id int primary key, name varchar(30));
alter table user6 add unique(name);

唯一索引的特点:

一个表中,可以有多个唯一索引
查询效率高
如果在某一列建立唯一索引,必须保证这列不能有重复数据
如果一个唯一索引上指定not null,等价于主键索引

普通索引的创建

第一种方式

create table user8(id int primary key,name varchar(20),email varchar(30),index(name) --在表的定义最后,指定某列为索引
);

第二种方式

create table user9(
id int primary key,  
name varchar(20),  
email varchar(30)
);
alter table user9 add index(name); --创建完表以后指定某列为普通索引

第三种方式

create table user10(id int primary key,  name varchar(20),  email varchar(30)
);  
create index idx_name on user10(name);-- 创建一个索引名为 idx_name 的索引  

普通索引的特点:

一个表中可以有多个普通索引,普通索引在实际开发中用的比较多
如果某列需要创建索引,但是该列有重复的值,那么我们就应该使用普通索引

全文索引的创建

当对文章字段或有大量文字的字段进行检索时,会使用到全文索引。MySQL提供全文索引机制,但是有要求,要求表的存储引擎必须是MyISAM,而且默认的全文索引支持英文,不支持中文。如果对中文进行全文检索,可以使用sphinx的中文版(coreseek)。

CREATE TABLE articles (id INT UNSIGNED AUTO_INCREMENT NOT NULL PRIMARY KEY,title VARCHAR(200),body TEXT,FULLTEXT (title,body))engine=MyISAM;INSERT INTO articles (title,body) VALUES('MySQL Tutorial','DBMS stands for DataBase ...'),('How To Use MySQL Well','After you went through a ...'),('Optimizing MySQL','In this tutorial we will show ...'),('1001 MySQL Tricks','1. Never run mysqld as root. 2. ...'),('MySQL vs. YourSQL','In the following database comparison ...'),('MySQL Security','When configured properly, MySQL ...');

查询有没有database数据

如果使用如下查询方式,虽然查询出数据,但是没有使用到全文索引

mysql> select * from articles where body like '%database%';+----+-------------------+------------------------------------------+| id | title             | body                                     |+----+-------------------+------------------------------------------+|  1 | MySQL Tutorial    | DBMS stands for DataBase ...             ||  5 | MySQL vs. YourSQL | In the following database comparison ... |+----+-------------------+------------------------------------------+

可以用explain工具看一下,是否使用到索引

mysql> explain select * from articles where body like '%database%'\G*************************** 1. row ***************************id: 1select_type: SIMPLEtable: articlestype: ALLpossible_keys: NULLkey: NULL  <== keynull表示没有用到索引
key_len: NULLref: NULLrows: 6Extra: Using where1 row in set (0.00 sec)

如何使用全文索引呢?

mysql> SELECT * FROM articles-> WHERE MATCH (title,body) AGAINST ('database');+----+-------------------+------------------------------------------+| id | title             | body                                     |+----+-------------------+------------------------------------------+|  5 | MySQL vs. YourSQL | In the following database comparison ... ||  1 | MySQL Tutorial    | DBMS stands for DataBase ...             |+----+-------------------+------------------------------------------+mysql> explain -> SELECT * FROM articles WHERE MATCH (title,body) AGAINST ('database')\G*************************** 1. row ***************************id: 1select_type: SIMPLEtable: articlestype: fulltextpossible_keys: titlekey: title <= key用到了titlekey_len: 0ref: 
rows: 1Extra: Using where

查询索引

show keys from 表名
show index from 表名;
desc 表名;

删除索引

第一种方法-删除主键索引:

alter table 表名 drop primary key;

第二种方法-其他索引的删除:

alter table 表名 drop index 索引名; --索引名就是show keys from 表名中的 Key _name 字段mysql> alter table user10 drop index idx name;

第三种方法方法:

drop index 索引名 on 表名mysql> drop index name on user8;

索引创建原则

比较频繁作为查询条件的字段应该创建索引
唯一性太差的字段不适合单独创建索引,即使频繁作为查询条件
更新非常频繁的字段不适合作创建索引
不会出现在where子句中的字段不该创建索引

http://www.dt0577.cn/news/8646.html

相关文章:

  • wordpress会话已过期seo排名优化seo
  • 云南省城乡建设厅网站统计网站流量的网站
  • 西安门户网站站点推广是什么意思
  • 安阳做网站电话百度投流运营
  • 塘下网站建设百度怎么发帖子
  • 响应式中文网站欣赏开发定制软件公司
  • 开发公司岗位安全操作规程seo外包公司多吗
  • 何做百度推广网站电商关键词seo排名
  • php动态网站开发简答题微信营销平台哪个好
  • 深圳宝安网站建设报价郑州网络推广服务
  • 成都专业做网站推广电话抖音推广引流平台
  • 建设网站怎么收费标准沧州百度推广公司
  • 凡科建站有哪些弊端厦门网络推广哪家强
  • 内部网站建设计划电商产品推广方案
  • 做网站公司怎么推销百度首页清爽版
  • 博彩网站如何做的充值百度seo怎么把关键词优化上去
  • wordpress 调用 编辑器西安关键词优化排名
  • 哪有定制开发绍兴seo排名收费
  • wordpress 店铺推荐seo学徒招聘
  • 如何免费做网站域名宁波seo网络推广
  • 个人主页网站设计进入百度官网首页
  • 河北网站备案系统上海高端seo公司
  • dedecms 网站日志外贸出口平台网站
  • 淘宝客 wordpress 主题涟源网站seo
  • 安县网站制作网络营销推广工具有哪些?
  • 教育培训网站制作长沙做引流推广的公司
  • 做设备租赁的网站seo创业
  • 重庆网站真实案例seo公司后付费
  • 网站开发使用什么工具沧州网站优化
  • 优质高职院校建设专题网站网络营销策略的定义