我有下面的2 mysql_queries**:**
查询1(对于imgClass和imgGender,这个查询还会重复两次):
$imgFamily_query = "SELECT DISTINCT imgFamily FROM primary_images WHERE '$clause' ";查询2:
$query_pag_data = "SELECT imgId, imgURL, imgTitle, view, secondary FROM primary_images WHERE '$clause' ORDER BY imgDate DESC";如您所见,WHERE 由一个变量控制。此变量的计算如下:
$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列:
imgFamilyimgClassimgGender但是,根据情况的不同,可以使用任意1、2或3列的组合。。
我的问题是,在这种情况下,我应该如何设置primary_images 的索引?这是一个“只读”表,所以我不担心有太多的索引。我希望表的查询尽可能高效。。
我正在考虑使用多列索引,但由于多列索引中的第一列可能不存在,索引将无法工作。
是否可以设置多个多列索引?或者,在这种情况下,只为所讨论的3列中的每一列设置一个索引会更好吗?
发布于 2011-09-22 20:37:14
我猜imgGender只会包含2到3个值- M,F和可能的未知值?在这种情况下,它是一个糟糕的索引候选人。
所以,我想你可以用两个指数算了。索引1应该只使用imgClass,并且当imgFamily列不是where子句的一部分时会被击中。索引2应该是一个复合索引,使用imgFamily和imgClass;即使imgClass不是where子句的一部分,也应该使用它。
发布于 2011-09-22 20:32:30
根据您的情况,最好保留3个单独的索引。
https://stackoverflow.com/questions/7521010
复制相似问题