コード例 #1
0
$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] = "";
            }
        }
    }
    $sql = CPerfomanceSQL::Format($arQuery["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);
    }
コード例 #2
0
 $rsSQL = CPerfomanceSQL::GetList(array("ID", "SQL_TEXT", "QUERY_TIME"), array(">ID" => $last_id), array("ID" => "ASC"), false, array("nTopCount" => 100));
 while ($arSQL = $rsSQL->Fetch()) {
     $_SESSION["queries"]++;
     $go = true;
     $sql_md5 = md5(CPerfQuery::remove_literals($arSQL["SQL_TEXT"]));
     //Check if did it already on previous steps
     if (!array_key_exists($sql_md5, $sql_cache)) {
         $sql_cache[$sql_md5] = true;
         $rsInd = CPerfomanceIndexSuggest::GetList(array("SQL_MD5"), array("=SQL_MD5" => $sql_md5), array());
         if ($rsInd->Fetch()) {
             CPerfomanceIndexSuggest::UpdateStat($sql_md5, 1, $arSQL["QUERY_TIME"], $arSQL["ID"]);
         } else {
             $arMissedKeys = array();
             $q = new CPerfQuery();
             $strSQL = $q->transform2select($arSQL["SQL_TEXT"]);
             if ($strSQL && $q->parse($strSQL)) {
                 $i = 0;
                 $arExplain = array();
                 $rsData = $DB->Query("explain " . $strSQL, true);
                 if (is_object($rsData)) {
                     while ($arRes = $rsData->Fetch()) {
                         $i++;
                         $arExplain[] = $arRes;
                         if ($arRes["type"] === "ALL" && strlen($arRes["key"]) == 0 && is_object($q) && ($i > 1 || $q->has_where($arRes["table"]))) {
                             $missed_keys = $q->suggest_index($arRes["table"]);
                             if ($missed_keys) {
                                 $arMissedKeys = array_merge($arMissedKeys, $missed_keys);
                             } elseif ($q->has_where()) {
                                 //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);