У меня есть следующие 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 столбцов:
imgFamily
imgClass
imgGender
Однако, в зависимости от ситуации, комбинация любых 1, 2 или 3 из нихиспользуются столбцы.
Мой вопрос: как мне настроить индексы для primary_images
в этой ситуации?Это таблица «только для чтения», поэтому меня не беспокоит наличие слишком большого количества индексов.Мне бы хотелось, чтобы таблица была настолько эффективной в своих запросах, насколько это возможно.
Я думал об использовании индекса с несколькими столбцами, но поскольку первый столбец в индексе с несколькими столбцами может отсутствовать,Индекс не будет работать.
Можно ли настроить несколько индексов с несколькими столбцами?Или было бы лучше в этом случае просто разместить индекс для каждого из 3 рассматриваемых столбцов?