MySQL索引使用的实例分析
本文的示例分析了MySQL索引的用法:MySQL的介绍:
在这两个表文章库:catery和文章。有10列数据catery。有20万篇文章,有一个article_catery 领域的文章对应的catery_id 字段中catery。文章表已article_catery指标的意义。数据库的大小是1.3g。
对问题的描述:
执行一个非常常见的查询:
复制代码如下:SELECT * FROM `第`哪里article_catery = 11阶的article_id DESC LIMIT 5的执行时间约为5秒左右
解uff1a
建立索引:复制代码代码如下:创建第指数idx_u(article_catery,article_id);
复制代码如下:SELECT * FROM `第`哪里article_catery = 11阶的article_id DESC LIMIT 5减少到0.0027秒
持续存在的问题:
复制代码如下:SELECT * FROM `第` article_catery在哪里(2,3)的article_id DESC LIMIT 5的执行时间为11.2850秒。
使用或:
从文章中选择*
在article_catery = 2
或article_catery = 3
通过article_id倒序
限制5
执行时间:11.0777
解决方案:避免使用或(或可导致清除),并使用联合所有。
使用联合所有:
(SELECT * FROM的文章,article_catery = 2阶的article_id DESC LIMIT 5)
联盟的所有(选择的文章,article_catery = 3 *由article_id DESC LIMIT 5)
通过article_id倒序
限制5
执行时间:0.0261
注:工会与工会的区别
在数据库中,联邦和联邦所有密钥都将两个结果集合并为一个,但它们在使用和效率方面都不同。
联合会在表连接后过滤掉重复的记录,因此在对表进行排序之后,我们将对结果集进行排序,删除重复的记录并返回结果。
在大多数实际应用中,不生成重复记录,最常见的是进程表和历史表联合:
SELECT * FROM gc_dfys UNION SELECT *从ls_jg_dfys
此SQL首先在运行时提取两个表的结果,然后通过排序空间、删除重复记录进行排序,最后返回结果集。如果数据量较大,则可能导致磁盘排序。
而联合只返回两个结果。这样,如果返回的两个结果有重复的数据,返回的结果集将包含重复的数据。
就效率而言,工会总比工会快得多。因此,如果我们能确认这两组结果不包含重复数据,我们就应该使用:
SELECT * FROM gc_dfys联盟所有SELECT * FROM ls_jg_dfys
注意:MySQL中的联合问题的顺序
当您今天编写MySQL数据库代码时,我们发现联合的结果是不期望的。
$时间=日期(H:我:);
为SQL1 =SELECT * FROM t在时间的时间顺序为时间倒序;
$ SQL2 =SELECT * FROM t在时间>的stime'order美元由许飞ASC ;
为SQL =($ SQL)联盟($ SQL2);
当为SQL1和SQL2美元分别执行,结果是正确的
但当美元的SQL执行时,其结果是相反的,这部分美元SQL1和SQL2美元上升,部分成为降。
搜索没有得到满意的答案,好像有些数据库不支持词序。
不知不觉中:
复制代码如下:$ SQL =SELECT * FROM($ SQL1)作为temp1联盟所有SELECT * FROM($ SQL2)作为);
这是因为不正确地使用您的联合。在联合运算中,按顺序语句不出现在由联合运算组合的两个SELECT语句中。
有关MySQL相关内容的更多读者感兴趣的可以看到专用站:
希望本文能帮助您了解MySQL数据库仪表。