MySQL单列索引是我们使用MySQL数据库中经常会见到的,MySQL单列索引和组合索引的区别可能有很多人还不是十分的了解,下面就为您分析两者的主要区别,供您参考学习。
为了形象地对比两者,再建一个表:
CREATE TABLE myIndex ( i_testID INT NOT NULL AUTO_INCREMENT, vc_Name VARCHAR(50) NOT NULL, vc_City VARCHAR(50) NOT NULL, i_Age INT NOT NULL, i_SchoolID INT NOT NULL, PRIMARY KEY (i_testID) ); |
在这 10000 条记录里面 7 上 8 下地分布了 5 条 vc_Name="erquan" 的记录,只不过 city,age,school 的组合各不相同。
来看这条T-SQL:
SELECT i_testID FROM myIndex WHERE vc_Name='erquan' AND vc_City='郑州' AND i_Age=25; |
首先考虑建MySQL单列索引:
在vc_Name列上建立了索引。执行 T-SQL 时,MYSQL 很快将目标锁定在了vc_Name=erquan 的 5 条记录上,取出来放到一中间结果集。在这个结果集里,先排除掉 vc_City 不等于"郑州"的记录,再排除 i_Age 不等于 25 的记录,最后筛选出唯一的符合条件的记录。
虽然在 vc_Name 上建立了索引,查询时MYSQL不用扫描整张表,效率有所提高,但离我们的要求还有一定的距离。同样的,在 vc_City 和 i_Age 分别建立的MySQL单列索引的效率相似。
为了进一步榨取 MySQL 的效率,就要考虑建立组合索引。就是将 vc_Name,vc_City,i_Age 建到一个索引里:
ALTER TABLE myIndex ADD INDEX name_city_age (vc_Name(10),vc_City,i_Age); |
建表时,vc_Name 长度为 50,这里为什么用 10 呢?因为一般情况下名字的长度不会超过 10,这样会加速索引查询速度,还会减少索引文件的大小,提高 INSERT 的更新速度。
执行 T-SQL 时,MySQL 无须扫描任何记录就到找到唯一的记录。
肯定有人要问了,如果分别在 vc_Name,vc_City,i_Age 上建立单列索引,让该表有 3 个单列索引,查询时和上述的组合索引效率一样吗?大不一样,远远低于我们的组合索引。虽然此时有了三个索引,但 MySQL 只能用到其中的那个它认为似乎是最有效率的单列索引。
建立这样的组合索引,其实是相当于分别建立了
vc_Name,vc_City,i_Age vc_Name,vc_City vc_Name |
这样的三个组合索引!为什么没有 vc_City,i_Age 等这样的组合索引呢?这是因为 mysql 组合索引“最左前缀”的结果。简单的理解就是只从最左面的开始组合。并不是只要包含这三列的查询都会用到该组合索引,下面的几个 T-SQL 会用到:
SELECT * FROM myIndex WHREE vc_Name="erquan" AND vc_City="郑州"
SELECT * FROM myIndex WHREE vc_Name="erquan"
|
而下面几个则不会用到:
SELECT * FROM myIndex WHREE i_Age=20 AND vc_City="郑州" SELECT * FROM myIndex WHREE vc_City="郑州" |
相关推荐
博文链接:https://qsfwy.iteye.com/blog/219588
Apache和Tomcat是两种常用的Web服务器,Apache主要处理静态页面,而Tomcat是Java Servlet和JSP的容器,主要用于处理动态内容。在某些场景下,为了整合两者的优点,我们会利用Apache的`mod_proxy_ajp`模块来实现...
杰基Jackey (jack-key) 是一个简单的仅定义标头,用作 Jack 元数据属性键的临时标准。 使用单个标头进行这种协调可以很容易地发现、使用和扩展 Jack 客户端使用的密钥。 没有必要使用这个标头,因为键是由它们的 URI...
标题中的“Windows-如何查询端口号被哪个程序占用”是一个关于系统管理的问题,涉及到Windows操作系统、网络通信和进程管理的知识点。在Windows操作系统中,端口号是网络应用程序用来标识和服务的逻辑标识符,每个...
这个例子展示了一种高压电池,类似于混合动力汽车中使用的电池...有关定义方程及其验证,请参见Jackey,R.“电气系统部件选择的简单有效铅酸蓄电池建模过程”,SAE世界大会与展览会,2007年4月,参考文献2007-01-0778。
- 社区论坛和博客文章也提供了丰富的实际案例和经验分享,有助于用户更好地理解和掌握SQL Loader。 #### 三、SQL Loader使用实例 ##### 示例一:将Excel数据导入到Oracle数据库 1. **准备工作**: - 创建控制...
从描述中的“博文链接:https://jackey25.iteye.com/blog/728435”我们可以推断,这可能是一个IT专业人士Jackey25在个人博客上分享的一次调试经验,涉及到的是排序算法的调试和优化。 在IT领域,排序算法是计算机...
这个例子展示了一种高压电池,类似于混合动力汽车中使用的电池...有关定义方程及其验证,请参见Jackey,R.“电气系统部件选择的简单有效铅酸蓄电池建模过程”,SAE世界大会与展览会,2007年4月,参考文献2007-01-0778。
对于希望深入学习CVS的用户,可以访问文章链接和论坛进行讨论和交流。 总结:WinCVS与CVSNT是Windows下进行版本控制的重要工具,它们可以帮助开发者有效地管理和协作代码,避免数据丢失和冲突。通过本文,读者可以...
根据给定文件的部分内容,我们可以提炼出一系列关于FPGA设计,特别是针对Xilinx FPGA的高级技巧和知识要点。以下是对这些知识点的详细解读: ### 1. 前言与综合工具的影响 #### 1.1 理解综合过程 在FPGA设计中,...
WORD万能百宝箱29.0是集日常办公、文字编辑处理等集多功能于一体的微软办公软件超大型插件,功能...欲知更多资讯,敬请登录软件版权作者(Jackey.Liang--梁瑞春)《中汛--银河ERP企业管理平台》中汛软件科技官方网站。
在移动通信领域,苹果的iPhone以其出色的用户体验和系统稳定性而闻名。然而,要保持这种体验,不仅需要强大的硬件支持,还需要软件方面不断的优化与更新。近期,苹果公司针对其iOS设备的iPhone Configuration ...
特别是对于集合和变量域函数的介绍,不仅帮助用户理解这些概念的理论基础,还提供了实用的操作指南,使得用户能够更好地应用这些功能来解决实际问题。 通过以上知识点的详细解析,我们可以看出 LINGO 11 不仅是一款...
(Jackey, llyygg, 斜?,??舞和其它?友)的??和?助 有???到 QQ群?1005454[煮茶待英雄] http://www.e-midas.cn上?? 本程序在Delphi 6.0 + SQL2000 下通?, 在Delpphi 7.0下 安?控件可能有些??. 本程序所需的所有...