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

企业网站建设方案平台网站设计加油站

企业网站建设方案平台,网站设计加油站,网站建设与管理实用教程课后答案,昆山网站建设秦皇岛在关系数据库中#xff0c;索引是一种单独的、物理的对数据库表中的一列或多列的值进行排序的一种存储结构#xff0c; 它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录#xff0c;可以根据目录中的页码… 在关系数据库中索引是一种单独的、物理的对数据库表中的一列或多列的值进行排序的一种存储结构 它是某个表中一列或若干列值的集合和相应的指向表中物理标识这些值的数据页的逻辑指针清单。索引的作用相当于图书的目录可以根据目录中的页码快速找到所需的内容。 索引提供只想存储在表的指定列中的数据值的指针然后根据指定的排序顺序对这些指针排序数据库使用索引以找到特定值然后根据指针找到包含该值的行这样可以使对应于表的sql语句执行的更快可快速访问数据表中的特定信息。 索引的原理 先提出几个问题 为什么要给表加上主键为什么加索引后会使查询变快为什么加索引后会使写入、修改、删除变慢什么情况下要同时在两个字段上建索引接下里一一解决 我们平时建表的时候都会为表加上主键 在某些关系数据库中 如果建表时不指定主键数据库会拒绝建表的语句执行。 事实上 一个加了主键的表并不能被称之为「表」。一个没加主键的表它的数据无序的放置在磁盘存储器上一行一行的排列的很整齐 跟我认知中的「表」很接近。如果给表上了主键那么表在磁盘上的存储结构就由整齐排列的结构转变成了树状结构也就是上面说的「平衡树」结构换句话说就是整个表就变成了一个索引。没错 再说一遍 整个表变成了一个索引也就是所谓的「聚集索引」。 这就是为什么一个表只能有一个主键 一个表只能有一个「聚集索引」因为主键的作用就是把「表」的数据格式转换成「索引平衡树」的格式放置。 主键一定是唯一性索引 假如一张表有一亿条数据 需要查找其中某一条数据按照常规逻辑 一条一条的去匹配的话 最坏的情况下需要匹配一亿次才能得到结果用大O标记法就是O(n)最坏时间复杂度这是无法接受的 而且这一亿条数据显然不能一次性读入内存供程序使用 因此 这一亿次匹配在不经缓存优化的情况下就是一亿次IO开销以现在磁盘的IO能力和CPU的运算能力 有可能需要几个月才能得出结果 。 如果把这张表转换成平衡树结构一棵非常茂盛和节点非常多的树假设这棵树有10层那么只需要10次IO开销就能查找到所需要的数据 速度以指数级别提升用大O标记法就是O(log n)n是记录总树底数是树的分叉数 结果就是树的层次数。换言之查找次数是以树的分叉数为底记录总数的对数用程序来表示就是Math.Log(100000000,10)100000000是记录数10是树的分叉数真实环境下分叉数远不止10 结果就是查找次数 这里的结果从亿降到了个位数。因此利用索引会使数据库查询有惊人的性能提升。 然而 事物都是有两面的 索引能让数据库查询数据的速度上升 而使写入数据的速度下降原因很简单的 因为平衡树这个结构必须一直维持在一个正确的状态 增删改数据都会改变平衡树各节点中的索引数据内容破坏树结构  因此在每次数据改变时 DBMS必须去重新梳理树索引的结构以确保它的正确这会带来不小的性能开销也就是为什么索引会给查询以外的操作带来副作用的原因。 以上是聚集索引的内容接下来看一下非聚集索引也就是常规索引 非聚集索引跟聚集索引一样同样是采用平衡树所谓索引的数据结构 非聚集索引和聚集索引的区别在于 通过聚集索引可以查到需要查找的数据 而通过非聚集索引可以查到记录对应的主键值 再使用主键的值通过聚集索引查找到需要的数据如下图 不管通过任何方式、索引查询表最终都是利用主键通过聚集索引来定位到数据。 MySQL索引类型   一、简介   MySQL目前主要有以下几种索引类型 1.普通索引 2.唯一索引 3.主键索引 4.组合索引 5.全文索引 二、语句 CREATE TABLE table_name[col_name data type][unique|fulltext][index|key][index_name](col_name[length])[asc|desc]   1.unique|fulltext为可选参数分别表示唯一索引、全文索引 2.index和key为同义词两者作用相同用来指定创建索引 3.col_name为需要创建索引的字段列该列必须从数据表中该定义的多个列中选择 4.index_name指定索引的名称为可选参数如果不指定默认col_name为索引值 5.length为可选参数表示索引的长度只有字符串类型的字段才能指定索引长度 6.asc或desc指定升序或降序的索引值存储 三、索引类型   1.普通索引 是最基本的索引它没有任何限制。它有以下几种创建方式 1直接创建索引 CREATE INDEX index_name ON table(column(length)) 2修改表结构的方式添加索引 ALTER TABLE table_name ADD INDEX index_name ON (column(length)) 3创建表的时候同时创建索引 CREATE TABLE table ( id int(11) NOT NULL AUTO_INCREMENT , title char(255) CHARACTER NOT NULL , content text CHARACTER NULL , time int(10) NULL DEFAULT NULL , PRIMARY KEY (id), INDEX index_name (title(length)) ) 4删除索引 DROP INDEX index_name ON table   2.唯一索引 与前面的普通索引类似不同的就是索引列的值必须唯一但允许有空值。如果是组合索引则列值的组合必须唯一。它有以下几种创建方式 1创建唯一索引 CREATE UNIQUE INDEX indexName ON table(column(length)) 2修改表结构 ALTER TABLE table_name ADD UNIQUE indexName ON (column(length)) 3创建表的时候直接指定 CREATE TABLE table ( id int(11) NOT NULL AUTO_INCREMENT , title char(255) CHARACTER NOT NULL , content text CHARACTER NULL , time int(10) NULL DEFAULT NULL , UNIQUE indexName (title(length)) );   3.主键索引 是一种特殊的唯一索引一个表只能有一个主键不允许有空值。一般是在建表的时候同时创建主键索引 CREATE TABLE table ( id int(11) NOT NULL AUTO_INCREMENT , title char(255) NOT NULL , PRIMARY KEY (id) );   4.组合索引 指多个字段上创建的索引只有在查询条件中使用了创建索引时的第一个字段索引才会被使用。使用组合索引时遵循最左前缀集合 ALTER TABLE table ADD INDEX name_city_age (name,city,age);   5.全文索引 主要用来查找文本中的关键字而不是直接与索引中的值相比较。fulltext索引跟其它索引大不相同它更像是一个搜索引擎而不是简单的where语句的参数匹配。fulltext索引配合match against操作使用而不是一般的where语句加like。它可以在create tablealter table create index使用不过目前只有char、varchartext 列上可以创建全文索引。值得一提的是在数据量较大时候现将数据放入一个没有全局索引的表中然后再用CREATE index创建fulltext索引要比先为一张表建立fulltext然后再将数据写入的速度快很多。 1创建表的适合添加全文索引 CREATE TABLE table ( id int(11) NOT NULL AUTO_INCREMENT , title char(255) CHARACTER NOT NULL , content text CHARACTER NULL , time int(10) NULL DEFAULT NULL , PRIMARY KEY (id), FULLTEXT (content) ); 2修改表结构添加全文索引 ALTER TABLE article ADD FULLTEXT index_content(content) 3直接创建索引 CREATE FULLTEXT INDEX index_content ON article(content) 四、缺点   1.虽然索引大大提高了查询速度同时却会降低更新表的速度如对表进行insert、update和delete。因为更新表时不仅要保存数据还要保存一下索引文件。 2.建立索引会占用磁盘空间的索引文件。一般情况这个问题不太严重但如果你在一个大表上创建了多种组合索引索引文件的会增长很快。 索引只是提高效率的一个因素如果有大数据量的表就需要花时间研究建立最优秀的索引或优化查询语句。 五、注意事项   使用索引时有以下一些技巧和注意事项 1.索引不会包含有null值的列 只要列中包含有null值都将不会被包含在索引中复合索引中只要有一列含有null值那么这一列对于此复合索引就是无效的。所以我们在数据库设计时不要让字段的默认值为null。 2.使用短索引 对串列进行索引如果可能应该指定一个前缀长度。例如如果有一个char(255)的列如果在前10个或20个字符内多数值是惟一的那么就不要对整个列进行索引。短索引不仅可以提高查询速度而且可以节省磁盘空间和I/O操作。 3.索引列排序 查询只使用一个索引因此如果where子句中已经使用了索引的话那么order by中的列是不会使用索引的。因此数据库默认排序可以符合要求的情况下不要使用排序操作尽量不要包含多个列的排序如果需要最好给这些列创建复合索引。 4.like语句操作 一般情况下不推荐使用like操作如果非使用不可如何使用也是一个问题。like “%aaa%” 不会使用索引而like “aaa%”可以使用索引。 5.不要在列上进行运算 这将导致索引失效而进行全表扫描例如 SELECT * FROM table_name WHERE YEAR(column_name)2017; 6.不使用not in和操作 转载于:https://www.cnblogs.com/little-orangeaaa/p/9707850.html
http://www.sadfv.cn/news/141903/

相关文章:

  • 那里可以做网站的吗做物流网站有哪些功能
  • 厦门做企业网站找谁沈阳建站
  • 私人让做彩票网站吗wordpress主题租房
  • thinkphp网站优化asp 做网站
  • 怎么设计一个自己的网站哪些网站做推广性价比高
  • 吉林省住房和城乡建设厅网站6电脑 手机网站建站
  • 网站建设 绍兴的公司响应式网站简单模板
  • 公司网站建设劳伦龙岗网站建设_公司推广
  • 做菠菜网站有没有被骗的dede网站改成自适应
  • 360建筑网是什么网站网站备案公告
  • 揭阳住房和城乡建设厅网站wordpress站点维护
  • 电子商务网站建设的主页中英双语网站模板
  • 兰州网站推徐州市专业做网站的公司
  • 做投资要关注哪些网站中天建设集团有限公司西南分公司
  • 网站建设的组织机构汉中 网站建设
  • 网站开发是怎么开发的网站建设模板是什么
  • 怎么查询网站ftp地址移动端什么意思
  • 大淘客构建自己的网站大气聚财的公司名字
  • 网站先做前台还是后台昆明贤邦网站建设
  • 汝州网站制作企业网站建设销售前景
  • 有专门做礼品的网站吗苏州市建设交易中心网站
  • 网站经营许可备案号做多国语言网站
  • 广西网站建设企业黄骅港金沙滩门票价格
  • 软件园二期做网站的公司超值的镇江网站建设
  • 微信公众号的跳转网站怎么做承德网站制作
  • 各大网站投放广告怎么做界面设计器
  • 五金网站方案网站建设 别墅
  • 电气建设网站青岛网络有限公司
  • 找设计网站公司wordpress能恢复修改前吗
  • 限时抢购网站源码专业网站设计制合肥作