Синтаксический анализ Excel в JSON

SHOW COLUMNS в mysql 5.1 (не 5.5) использует временную таблицу диска.

Поэтому в некоторых случаях его можно считать медленным. По крайней мере, он может увеличить ваше значение created_tmp_disk_tables. Представьте себе одну временную таблицу диска для каждого соединения или для каждого запроса на страницу.

SHOW COLUMNS на самом деле не так медленно, возможно, потому, что он использует кеш файловой системы. Phpmyadmin говорит ~ 0.5ms последовательно. Это ничто по сравнению с 500 мс-1000 мс на странице wordpress. Но все-таки есть моменты. Существует дисковая система, вы никогда не знаете, что происходит, когда сервер занят, кеш заполнен, hdd застопорился и т. Д.

Извлечение имен столбцов через SELECT * FROM ... LIMIT 1 было около ~ 0.1ms , и он также может использовать кеш запросов.

Итак, вот мой небольшой оптимизированный код для получения имен столбцов из таблицы без возможности использования столбцов показа:

function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();

global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
    return $db_columns_ar_cache[$table];


//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
    {
    foreach($row as $name=>$val)
        $cols[$name]=$name;
    }
else
    {
    $coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
    if($coldata)
        foreach($coldata as $row)
            $cols[$row->Field]=$row->Field;
    }
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}

Примечания :

  • Пока ваша первая строка не содержит мегабайтный диапазон данных, она должна работать нормально.
  • Названия функций db_rows и db_row_ar должны быть заменены вашим конкретным настройка базы данных.

0
задан HAppleknocker 18 March 2019 в 18:16
поделиться