首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何确定最优的MySQL表指数,什么情况下条款的内容不同?

如何确定最优的MySQL表指数,什么情况下条款的内容不同?
EN

Stack Overflow用户
提问于 2011-09-22 20:25:10
回答 2查看 165关注 0票数 0

我有下面的2 mysql_queries**:**

查询1(对于imgClassimgGender,这个查询还会重复两次):

代码语言:javascript
复制
$imgFamily_query = "SELECT DISTINCT imgFamily FROM primary_images WHERE '$clause' ";

查询2:

代码语言:javascript
复制
$query_pag_data = "SELECT imgId, imgURL, imgTitle, view, secondary FROM primary_images WHERE '$clause' ORDER BY imgDate DESC";

如您所见,WHERE 由一个变量控制。此变量的计算如下:

代码语言:javascript
复制
$where_clauses = array();

if ($imgFamilyFalse && $imgClassFalse && $imgGenderFalse) {
    $where_clauses[] = "1=1"; // default do-nothing clause
}

if ($imgFamilyTrue) {
   $where_clauses[] = 'imgFamily=' . "'" . mysql_real_escape_string($_GET['imgFamily']) . "'";
}
if ($imgClassTrue) {
   $where_clauses[] = 'imgClass=' . "'" . mysql_real_escape_string($_GET['imgClass']) . "'";
}
if ($imgGenderTrue) {
   $where_clauses[] = 'imgGender=' . "'" . mysql_real_escape_string($_GET['imgGender']) . "'";
}


$clause = implode(' AND ', $where_clauses);

WHERE 子句仅依赖于以下3列:

  1. imgFamily
  2. imgClass
  3. imgGender

但是,根据情况的不同,可以使用任意1、2或3列的组合。。

我的问题是,在这种情况下,我应该如何设置primary_images 的索引?这是一个“只读”表,所以我不担心有太多的索引。我希望表的查询尽可能高效。。

我正在考虑使用多列索引,但由于多列索引中的第一列可能不存在,索引将无法工作。

是否可以设置多个多列索引?或者,在这种情况下,只为所讨论的3列中的每一列设置一个索引会更好吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-09-22 20:37:14

我猜imgGender只会包含2到3个值- M,F和可能的未知值?在这种情况下,它是一个糟糕的索引候选人。

所以,我想你可以用两个指数算了。索引1应该只使用imgClass,并且当imgFamily列不是where子句的一部分时会被击中。索引2应该是一个复合索引,使用imgFamily和imgClass;即使imgClass不是where子句的一部分,也应该使用它。

票数 3
EN

Stack Overflow用户

发布于 2011-09-22 20:32:30

根据您的情况,最好保留3个单独的索引。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7521010

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档