首页 数据库 mysql教程 Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL

Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL

Jun 01, 2016 pm 01:56 PM
查询

  4.3 列类型选择与查询效率

  要选择有助于使查询执行更快的列,应遵循如下规则(这里,“BLOB 类型”应该理解为即包含B L O B也包含TEXT 类型):

  ■ 使用定长列,不使用可变长列。这条准则对被经常修改,从而容易产生碎片的表来说特别重要。例如,应该选择CHAR 列而不选择VARCHAR 列。所要权衡的是使用定长列时,表所占用的空间更多,但如果能够承担这种空间的耗费,使用定长行将比使用可变长的行处理快得多。

  ■ 在较短的列能够满足要求时不要使用较长的列。如果正使用的是定长的CHAR 列,应该使它们尽量短。如果列中所存储的最长值为40 个字符,那么就不要将其定义为CHAR ( 2 5 5 );只要定义为CHAR(40) 即可。如果能够使用MEDIUMINT 而不是BIGINT,表将会更小(磁盘I/O 也较少),其值在计算中也可以处理得更快。

  ■ 将列定义为NOT NULL。这样处理更快,所需空间更少。而且有时还能简化查询,因为不需要检查是否存在特例NULL。

  ■ 考虑使用ENUM 列。如果有一个只含有限数目的特定值的列,那么应该考虑将其转换为ENUM 列。ENUM 列的值可以更快地处理,因为它们在内部是以数值表示的。

  ■ 使用PROCEDURE ANALYSE( )。如果使用的是MySQL3.23 或更新的版本,应该执行PROCEDURE ANALYSE( ),查看它所提供的关于表中列的信息:

Mysql入门系列:MYSQL列类型选择与MYSQL查询效率[图]_MySQL  

  相应输出中有一列是关于表中每列的最佳列类型的建议。第二个例子要求PROCEDURE ANALYSE( ) 不要建议含有多于16 个值或取多于256 字节的ENUM 类型(可根据需要更改这些值)。如果没有这样的限制,输出可能会很长;ENUM 的定义也会很难阅读。根据PROCEDURE ANALYSE( ) 的输出,会发现可以对表进行更改以利用更有效的类型。如果希望更改值类型,使用ALTER TABLE 语句即可。

  ■ 将数据装入B L O B。用BLOB 存储应用程序中包装或未包装的数据,有可能使原来需要几个检索操作才能完成的数据检索得以在单个检索操作中完成。而且还对存储标准表结构不易表示的数据或随时间变化的数据有帮助。在第3 章ALTER TABLE 语句的介绍中,有一个例子处理存储来自Web 问卷的结果的表。该例子中讨论了在问卷中增加问题时,怎样利用ALTER TABLE 向该表追加列。

  解决该问题的另一个方法是让处理Web 的应用程序将数据包装成某种数据结构,然后将其插入单个BLOB 列。这样会增加应用程序对数据进行解码的开销(而且从表中检索出记录后要对其进行编码),但是简化了表的结构,并且不用在更改问卷时对表进行更改。另一方面, BLOB 值也有自己的固有问题,特别是在进行大量的DELETE 或UPDATE 操作时更是如此。删除BLOB 会在表中留下一个大空白,在以后将需用一个记录或可能是不同大小的多个记录来填充。

  ■ 对容易产生碎片的表使用OPTIMIZE TABLE。大量进行修改的表,特别是那些含有可变长列的表,容易产生碎片。碎片不好,因为它在存储表的磁盘块中产生不使用的空间。随着时间的增长,必须读取更多的块才能取到有效的行,从而降低了性能。任意具有可变长行的表都存在这个问题,但这个问题对BLOB 列更为突出,因为它们尺寸的变化非常大。经常使用OPTIMIZE TABLE 有助于保持性能不下降。

  ■ 使用合成索引。合成索引列有时很有用。一种技术是根据其他列建立一个散列值,并将其存储在一个独立的列中,然后可通过搜索散列值找到行。这只对精确匹配的查询有效。(散列值对具有诸如“ <”或“ > =”这样的操作符的范围搜索没有用处)。在MySQL3.23版及以上版本中,散列值可利用MD5( ) 函数产生。散列索引对BLOB 列特别有用。有一事要注意,在MySQL3.23.2 以前的版本中,不能索引BLOB 类型。甚至是在3.23.2 或更新的版本中,利用散列值作为标识值来查找BLOB 值也比搜索BLOB 列本身更快。

  ■ 除非有必要,否则应避免检索较大的BLOB 或TEXT 值。例如,除非肯定WHERE 子句能够将结果恰好限制在所想要的行上,否则SELECT * 查询不是一个好办法。这样做可能会将非常大的BLOB 值无目的地从网络上拖过来。这是存储在另一列中的BLOB 标识信息很有用的另一种情形。可以搜索该列以确定想要的行,然后从限定的行中检索BLOB 值。

  ■ 将BLOB 值隔离在一个独立的表中。在某些情况下,将BLOB 列从表中移出放入另一个副表可能具有一定的意义,条件是移出BLOB 列后可将表转换为定长行格式。这样会减少主表中的碎片,而且能利用定长行的性能优势。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前 By 尊渡假赌尊渡假赌尊渡假赌

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

12306怎么查询历史购票记录 查看历史购票记录的方法 12306怎么查询历史购票记录 查看历史购票记录的方法 Mar 28, 2024 pm 03:11 PM

  12306订票app下载最新版是一款大家非常满意的出行购票软件,想去哪里就去那里非常方便,软件内提供的票源非常多,只需要通过实名认证就能在线购票,所有用户的出行车票机票都可以轻松买到,享受不同的优惠折扣。还能提前开启预约抢票,预约酒店、专车接送都是可以的,有了它想去哪里就去那里一键购票,出行更加简单方便,让大家的出行体验更舒服,现在小编在线详细为12306用户们带来查看历史购票记录的方法。  1.打开铁路12306,点击右下角我的,点击我的订单  2.在订单页面点击已支付。  3.在已支付页

学信网如何查询自己的学历 学信网如何查询自己的学历 Mar 28, 2024 pm 04:31 PM

学信网如何查询自己的学历?在学信网中是可以查询到自己的学历,很多用户都不知道如何在学信网中查询到自己的学历,接下来就是小编为用户带来的学信网查询自己学历方法图文教程,感兴趣的用户快来一起看看吧!学信网使用教程学信网如何查询自己的学历一、学信网入口:https://www.chsi.com.cn/二、网站查询:第一步:点击上方学信网地址,进入首页点击【学历查询】;第二步:在最新的网页中点击如下图箭头所示的【查询】;第三步:之后在新页面点击【的登陆学信档案】;第四步:在登陆页面输入信息点击【登陆】;

MySQL与PL/SQL的异同比较 MySQL与PL/SQL的异同比较 Mar 16, 2024 am 11:15 AM

MySQL与PL/SQL是两种不同的数据库管理系统,分别代表了关系型数据库和过程化语言的特点。本文将比较MySQL和PL/SQL的异同点,并附带具体的代码示例进行说明。MySQL是一种流行的关系型数据库管理系统,采用结构化查询语言(SQL)来管理和操作数据库。而PL/SQL是Oracle数据库特有的过程化语言,用于编写存储过程、触发器和函数等数据库对象。相同

苹果手机怎么查询激活日期 苹果手机怎么查询激活日期 Mar 08, 2024 pm 04:07 PM

使用苹果手机想要查询激活日期,最好的方法是通过手机中的序列号来查询,也可以通过访问苹果的官网来进行查询,通过连接电脑查询,下载第三方软件查询。苹果手机怎么查询激活日期答:序列号查询,苹果官网查询,电脑查询,第三方软件查询1、用户最好的方式就是知道自己手机的序列号,打开设置通用关于本机就可以看到序列号。2、使用序列号不仅可以知道自己手机的激活日期,还可以查看手机版本,手机产地,手机出厂日期等。3、用户访问苹果的官网找到技术支持,找到页面底部的服务和维修栏目,里面查看iPhone的激活信息。4、用户

如何使用Oracle 查询表是否被锁? 如何使用Oracle 查询表是否被锁? Mar 06, 2024 am 11:54 AM

标题:如何使用Oracle查询表是否被锁?在Oracle数据库中,表锁是指当一个事务正在对表执行写操作时,其他事务想要对该表执行写操作或者对表进行结构改变(如增加列、删除行等)时会被阻塞。在实际开发过程中,我们经常需要查询表是否被锁,以便更好地排查和处理相关问题。本文将介绍如何使用Oracle语句查询表是否被锁,并给出具体的代码示例。要查询表是否被锁,我们

Discuz数据库位置查询技巧分享 Discuz数据库位置查询技巧分享 Mar 10, 2024 pm 01:36 PM

论坛是互联网上非常常见的网站形式之一,它为用户提供了一个分享信息、交流讨论的平台。而Discuz是一款常用的论坛程序,相信很多站长都已经非常熟悉了。在进行Discuz论坛的开发和管理过程中,经常需要查询数据库中的数据来进行分析或处理。在这篇文章中,我们将分享一些查询Discuz数据库位置的技巧,并提供具体的代码示例。首先,我们需要了解Discuz的数据库结构

如何查询通神币最新价格? 如何查询通神币最新价格? Mar 21, 2024 pm 02:46 PM

如何查询通神币最新价格?通神币是一种数字货币,可用于购买游戏内物品、服务和资产。它是去中心化的,意味着它不受政府或金融机构的控制。通神币的交易在区块链上进行,这是一个分布式账本,记录了所有通神币交易的信息。要查询通神币的最新价格,您可以使用以下步骤:选择一个可靠的价格查询网站或应用程序。一些常用的价格查询网站包括:CoinMarketCap:https://coinmarketcap.com/Coindesk:https://www.coindesk.com/币安:https://www.bin

如何查询BitTorrent币最新价格? 如何查询BitTorrent币最新价格? Mar 06, 2024 pm 02:13 PM

查询BitTorrent币(BTT)最新价格BTT是TRON区块链上的加密货币,用于奖励BitTorrent网络用户分享和下载文件。查找BTT最新价格的方法如下:选择一个可靠的价格查询网站或应用程序。一些常用的价格查询网站包括:CoinMarketCap:https://coinmarketcap.com/Coindesk:https://www.coindesk.com/币安:https://www.binance.com/在网站或应用程序中搜索BTT。查看BTT的最新价格。注意:加密货币价格

See all articles