$ID = intval($_REQUEST["ID"]);
// Id of the edited record
$rsSuggest = CPerfomanceIndexSuggest::GetList(array("ID", "TABLE_NAME", "TABLE_ALIAS", "COLUMN_NAMES", "SQL_TEXT", "SQL_EXPLAIN", "SQL_TIME", "SQL_COUNT"), array("=ID" => $ID), array());
$arSuggest = $rsSuggest->Fetch();
if (!$arSuggest) {
    $APPLICATION->AuthForm(GetMessage("ACCESS_DENIED"));
}
$sql = CPerfomanceSQL::Format($arSuggest["SQL_TEXT"]);
$sql = htmlspecialcharsEx($sql);
$sql = preg_replace("/(" . preg_quote($arSuggest["TABLE_NAME"]) . "\\s+(?i:as\\s+)*" . $arSuggest["TABLE_ALIAS"] . ")\\s+/", "<b>\\1</b> ", $sql);
foreach (explode(",", $arSuggest["COLUMN_NAMES"]) as $column_name) {
    $sql = str_replace($arSuggest["TABLE_ALIAS"] . "." . $column_name, "<b>" . $arSuggest["TABLE_ALIAS"] . "." . $column_name . "</b>", $sql);
}
$arSuggest["FORMATTED_SQL_TEXT"] = $sql;
$arColumns = explode(",", $arSuggest["COLUMN_NAMES"]);
$arTableStat = CPerfQueryStat::GatherTableStat($arSuggest["TABLE_NAME"]);
$arIndexes = CPerfomanceTable::GetIndexes($arSuggest["TABLE_NAME"]);
$arQueries = array();
$rsQueries = CPerfomanceSQL::GetList(array("ID", "SQL_TEXT"), array("=SUGGEST_ID" => $ID), array("ID" => "ASC"), false, array("nTopCount" => 10));
while ($arQuery = $rsQueries->Fetch()) {
    $arQuery["STAT"] = array();
    $arQuery["WHERE"] = array();
    $arQuery["JOIN"] = array();
    $q = new CPerfQuery();
    if ($q->parse($q->transform2select($arQuery["SQL_TEXT"]))) {
        foreach ($arColumns as $column_name) {
            $arQuery["WHERE"][$column_name] = $q->find_value($arSuggest["TABLE_NAME"], $column_name);
            if ($arQuery["WHERE"][$column_name] == "") {
                $arQuery["JOIN"][$column_name] = $q->find_join($arSuggest["TABLE_NAME"], $column_name);
            } else {
                $arQuery["JOIN"][$column_name] = "";
示例#2
0
 protected static function _gather_stat($table, $column, $value, $max_size = -1)
 {
     global $DB;
     $table = trim($table, "`");
     $column = trim($column, "`");
     $arStat = CPerfQueryStat::GatherTableStat($table);
     if ($max_size < 0 || $arStat["TABLE_SIZE"] < $max_size) {
         $table = preg_replace("/[^A-Za-z0-9%_]+/i", "", $table);
         $column = preg_replace("/[^A-Za-z0-9%_]+/i", "", $column);
         if (isset($value)) {
             $rs = $DB->Query($d = "\n\t\t\t\t\tselect count(1) CNT\n\t\t\t\t\tfrom " . $DB->ForSQL($table) . "\n\t\t\t\t\twhere " . $DB->ForSQL($column) . " = '" . $DB->ForSQL($value) . "'\n\t\t\t\t");
         } else {
             $rs = $DB->Query($d = "\n\t\t\t\t\tselect count(distinct " . $DB->ForSQL($column) . ") CNT\n\t\t\t\t\tfrom " . $DB->ForSQL($table) . "\n\t\t\t\t");
         }
         if ($ar = $rs->Fetch()) {
             $DB->Add("b_perf_tab_column_stat", array("TABLE_NAME" => $table, "COLUMN_NAME" => $column, "TABLE_ROWS" => $arStat["TABLE_ROWS"], "COLUMN_ROWS" => $ar["CNT"], "VALUE" => isset($value) ? $value : false));
         }
         return true;
     } else {
         return false;
     }
 }