case "delete_index":
            if ($isAdmin) {
                foreach ($arID as $ID) {
                    $rs = CPerfomanceIndexComplete::GetList(array("=ID" => $ID));
                    while ($ar = $rs->Fetch()) {
                        if ($DB->Query("ALTER TABLE " . $ar["TABLE_NAME"] . " DROP INDEX " . $ar["INDEX_NAME"])) {
                            CPerfomanceIndexComplete::Delete($ID);
                        }
                    }
                }
            }
            break;
    }
}
$lAdmin->AddHeaders(array(array("id" => "BANNED", "content" => GetMessage("PERFMON_ICOMPLETE_STATUS"), "align" => "center", "default" => true), array("id" => "TABLE_NAME", "content" => GetMessage("PERFMON_ICOMPLETE_TABLE_NAME"), "default" => true), array("id" => "COLUMN_NAMES", "content" => GetMessage("PERFMON_ICOMPLETE_COLUMN_NAMES"), "default" => true), array("id" => "INDEX_NAME", "content" => GetMessage("PERFMON_ICOMPLETE_INDEX_NAME"), "default" => true)));
$cData = new CPerfomanceIndexComplete();
$rsData = $cData->GetList();
$rsData = new CAdminResult($rsData, $sTableID);
$rsData->NavStart();
$lAdmin->NavText($rsData->GetNavPrint(GetMessage("PERFMON_ICOMPLETE_PAGE")));
while ($arRes = $rsData->NavNext(true, "f_")) {
    $row = $lAdmin->AddRow($f_NAME, $arRes);
    $arActions = array();
    $row->AddViewField("COLUMN_NAMES", str_replace(",", "<br>", $f_COLUMN_NAMES));
    if ($f_BANNED == "N") {
        $row->AddViewField("BANNED", '<span class="adm-lamp adm-lamp-in-list adm-lamp-green" title="' . htmlspecialcharsbx(GetMessage("PERFMON_ICOMPLETE_GREEN_ALT")) . '"></span>');
        if ($isAdmin) {
            $arActions[] = array("TEXT" => GetMessage("PERFMON_ICOMPLETE_DELETE_INDEX"), "ACTION" => $lAdmin->ActionDoGroup($f_ID, 'delete_index'));
        }
    } elseif ($f_BANNED == "Y") {
        $row->AddViewField("BANNED", '<span class="adm-lamp adm-lamp-in-list adm-lamp-red" title="' . htmlspecialcharsbx(GetMessage("PERFMON_ICOMPLETE_RED_ALT")) . '"></span>');
                                 //Check if it is possible to find missed keys on joined tables
                                 foreach ($q->table_joins($arRes["table"]) as $alias => $join_columns) {
                                     $missed_keys = $q->suggest_index($alias);
                                     if ($missed_keys) {
                                         $arMissedKeys = array_merge($arMissedKeys, $missed_keys);
                                     }
                                 }
                             }
                         }
                     }
                 }
             }
             if (!empty($arMissedKeys)) {
                 foreach (array_unique($arMissedKeys) as $suggest) {
                     list($alias, $table, $columns) = explode(":", $suggest);
                     if (!CPerfQueryStat::IsBanned($table, $columns) && !CPerfomanceIndexComplete::IsBanned($table, $columns)) {
                         if (CPerfQueryStat::GatherExpressStat($table, $columns, $q) && !CPerfQueryStat::IsSelective($table, $columns, $q)) {
                             CPerfQueryStat::Ban($table, $columns);
                         } else {
                             CPerfomanceIndexSuggest::Add(array("TABLE_NAME" => $table, "TABLE_ALIAS" => $alias, "COLUMN_NAMES" => $columns, "SQL_TEXT" => $arSQL["SQL_TEXT"], "SQL_MD5" => $sql_md5, "SQL_COUNT" => 0, "SQL_TIME" => 0, "SQL_EXPLAIN" => serialize($arExplain)));
                         }
                     }
                 }
                 CPerfomanceIndexSuggest::UpdateStat($sql_md5, 1, $arSQL["QUERY_TIME"], $arSQL["ID"]);
             }
         }
     } else {
         CPerfomanceIndexSuggest::UpdateStat($sql_md5, 1, $arSQL["QUERY_TIME"], $arSQL["ID"]);
     }
     $last_id = $arSQL["ID"];
 }
        if (is_object($res)) {
            CPerfomanceIndexComplete::Add(array("TABLE_NAME" => $arSuggest["TABLE_NAME"], "COLUMN_NAMES" => $arSuggest["COLUMN_NAMES"], "INDEX_NAME" => $_REQUEST["index_name"], "BANNED" => "N"));
            LocalRedirect("/bitrix/admin/perfmon_index_detail.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . "&" . $tabControl->ActiveTabParam());
        } else {
            $strError = $DB->GetErrorMessage();
        }
    } elseif (isset($_REQUEST["drop_index"]) && isset($_REQUEST["ddl"])) {
        $res = $DB->Query($_REQUEST["ddl"], true);
        if (is_object($res)) {
            CPerfomanceIndexComplete::DeleteByTableName($arSuggest["TABLE_NAME"], $arSuggest["COLUMN_NAMES"]);
            LocalRedirect("/bitrix/admin/perfmon_index_detail.php?ID=" . $ID . "&lang=" . LANGUAGE_ID . "&" . $tabControl->ActiveTabParam());
        } else {
            $strError = $DB->GetErrorMessage();
        }
    } elseif (isset($_REQUEST["ban_index"])) {
        CPerfomanceIndexComplete::Add(array("TABLE_NAME" => $arSuggest["TABLE_NAME"], "COLUMN_NAMES" => $arSuggest["COLUMN_NAMES"], "INDEX_NAME" => false, "BANNED" => "Y"));
        LocalRedirect("/bitrix/admin/perfmon_index_list.php?lang=" . LANGUAGE_ID);
    }
}
$APPLICATION->SetTitle(GetMessage("PERFMON_IDETAIL_TABLE_TITLE"));
require $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php";
$aMenu = array(array("TEXT" => GetMessage("PERFMON_IDETAIL_MENU_LIST"), "TITLE" => GetMessage("PERFMON_IDETAIL_MENU_LIST_TITLE"), "LINK" => "perfmon_index_list.php?lang=" . LANGUAGE_ID, "ICON" => "btn_list"));
$context = new CAdminContextMenu($aMenu);
$context->Show();
if ($strError) {
    CAdminMessage::ShowMessage(array("MESSAGE" => GetMessage("admin_lib_error"), "DETAILS" => $strError, "TYPE" => "ERROR"));
}
?>
<form method="POST" action="<?php 
echo $APPLICATION->GetCurPage();
?>
示例#4
0
												if ($missed_keys)
													$arMissedKeys = array_merge($arMissedKeys, $missed_keys);
											}
										}
									}
								}
							}
						}
						if (!empty($arMissedKeys))
						{
							foreach (array_unique($arMissedKeys) as $suggest)
							{
								list($alias, $table, $columns) = explode(":", $suggest);
								if (
									!CPerfQueryStat::IsBanned($table, $columns)
									&& !CPerfomanceIndexComplete::IsBanned($table, $columns)
								)
								{
									if (
										CPerfQueryStat::GatherExpressStat($table, $columns, $q)
										&& !CPerfQueryStat::IsSelective($table, $columns, $q)
									)
										CPerfQueryStat::Ban($table, $columns);
									else
									{
										CPerfomanceIndexSuggest::Add(array(
											"TABLE_NAME" => $table,
											"TABLE_ALIAS" => $alias,
											"COLUMN_NAMES" => $columns,
											"SQL_TEXT" => $arSQL["SQL_TEXT"],
											"SQL_MD5" => $sql_md5,