Страница 1 из 2
SQLite - создать таблицу с индексами
Добавлено: 2011-01-09 15:12:28
Alex Keda
Код: Выделить всё
// запрос на создание таблицы
$hf_query = "CREATE TABLE resources
(id INTEGER PRIMARY KEY, /* autoincrement */
start_date VARCHAR(10), /* start date */
start_time VARCHAR(8), /* start time */
site VARCHAR(128), /* request virtualhost */
page VARCHAR(128), /* request page */
execution_time DOUBLE /* run time */
)";
такая вот таблица.
первичный создаётся автоматом.
нужны индексы по полям start_date/site/page
можно ли создать их сразу с таблицей, одним запросом (как в MySQL)
полдня уже бьюсь - нифига не понятно. все всегда создают тока первичный сразу, остальное потом.
мне это варинат не очень катит
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-10 9:49:41
unix-admin
нужен составной PRIMARY KEY ?
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-10 18:33:26
Гость
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-10 23:02:15
Alex Keda
нужен просто индекс. поле не уникальное.
маны курил. просветления не принесли.
в примерах, кстати, тока с примари кеем конструкция.
у меня похоже и сделано.
мне надо сразу ещё три индекса по трём полям
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-10 23:35:22
unix-admin
[quote="Alex Keda"]нужен просто индекс. поле не уникальное.
Код: Выделить всё
CREATE TABLE something (column1, column2, PRIMARY KEY (column1, column2));
Такой простоиндекс?
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-10 23:41:41
Alex Keda
от блин.
вот как это выглядит в mysql
Код: Выделить всё
CREATE TABLE `resources` (
`id` int(11) NOT NULL,
`start_date` varchar(10) DEFAULT NULL,
`start_time` varchar(8) DEFAULT NULL,
`site` varchar(128) DEFAULT NULL,
`page` varchar(128) DEFAULT NULL,
`execution_time` double DEFAULT NULL,
PRIMARY KEY (`id`),
KEY `start_date` (`start_date`),
KEY `site` (`site`),
KEY `page` (`page`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251
мне надо тоже самое для sqlite
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-11 10:08:56
unix-admin
Alex Keda писал(а):
мне надо тоже самое для sqlite
Тоже самое вряд ли получится...
Вот так можно попробовать:
Код: Выделить всё
sqlite> CREATE TABLE resources (id INTEGER, start_date VARCHAR(10), start_time VARCHAR(8), site VARCHAR(128), page VARCHAR(128), execution_time DOUBLE, UNIQUE (start_date, site, page));
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-11 23:29:03
Alex Keda
неа. такой индекс не нужен
выборки будут максимум по start_date+site
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 0:45:32
unix-admin
Alex Keda писал(а):неа. такой индекс не нужен
выборки будут максимум по start_date+site
максимум-минимум можно под себя докрутить...
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 9:21:25
Alex Keda
хотелось решение искаропки.
яный пень что индексы я и руками нужные могу проставить
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 12:24:07
Gamerman
А в чем проблема 2 запроса подряд отправить? Сначала создали, потом индексы прикрутить?
Что-то это напоминает мне старые ФоксПрошные базы. Сначала таблица, потом индексы.
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 16:09:22
Alex Keda
та не проблема
задача максимально ускорить сей процесс.
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 17:39:28
Gamerman
За счет чего может быть предполагаемое ускорение?
В одном пакете 2 запроса можно отправить?
Никогда с скюлайтом не работал, могу бред нести

Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 17:42:49
Alex Keda
я тоже

)
насколкьоя понимаю - движок встроен прям в php, база открылась на коннекте
дальше уже неважно - все запросы - время.
тока на парсинге строки в файле выиграешь, но это очень мало.
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 17:50:19
Gamerman
Думаю, что не стоит заморачиваться, 2 запроса подряд отправить да и все.
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 17:53:40
Alex Keda
и так каждый раз при вызове любого php скрипта будет...
нехорошее решение
http://forum.host-food.ru/viewtopic.php?f=15&t=677
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 18:06:24
Gamerman
Насколько я знаю, при определенных условиях (как правило по умолчанию) php при работе с Мускулем делает так (для каждого запроса):
1. Подключение.
2. Авторизация.
3. Выполнение запроса.
4. Возврат выборки.
5. Закрытие сессии.
Если и скюлайтом так же, то действительно - неоптимально.
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 21:39:37
Alex Keda
нет. вы неправы.
конект, обычно, один на обработку страницы.
запросов может быть много. до сотен и тысяч.
закрытие сессии - после отрабоки php кода
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 22:23:00
Gamerman
Да, я ошибся.
Хотел, сказать, что после формирования страницы коннект закрывается.
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 22:50:09
thefree
ты потерял во многих случаях проверку на коннет и exit("no connect") это вандализм т.к. там только int
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-12 23:30:27
Alex Keda
в смысле
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-13 9:59:45
thefree
Alex Keda писал(а):в смысле
get.load.begin.php
Код: Выделить всё
if (!$hf_db) exit("cannot create database!");
http://ru.php.net/manual/en/function.exit.php
тут вообще мне кажется, что не стоит выводить какие либо ошибки т.к. и титульная страница будет их наследовать.
resource.php
не закрыт, нет проверки на sqlite_open
рассматривай вопрос в том, что абонент дурак и он задаст вопрос а почему у меня белая страница!
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-13 10:17:50
Alex Keda
теги незакрытые - пофиг, это html, переварит. мне краткость кода была важна
а остальное - реально, не подумал.
спасибо, пофиксил
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-13 12:36:06
thefree
Alex Keda писал(а):теги незакрытые - пофиг, это html, переварит. мне краткость кода была важна
а остальное - реально, не подумал.
спасибо, пофиксил
краткость ты наша ... начнем с малого, то что ты запускаешь всё одно дает нагрузку, пофиг что маленькую но есть.
Так, что тебе надо это выполнять когда оно будет работать.
Вот попробуй когда я пошаманил надеюсь на хосте у тебя php > 5.0
Код: Выделить всё
<?php
// Создадим базу данных
if (GLOBAL $hf_db = @sqlite_open($_SERVER["DOCUMENT_ROOT"] . "/../resource_usage.db")) {
// переменные которые будут нужны в конце
GLOBAL $hf_start_date = date('Y-m-d');
GLOBAL $hf_start_time = date('G:i:s');
GLOBAL $hf_start_time_mm = microtime(1);
// запрос на создание таблицы
$hf_query = "CREATE TABLE /* IF NOT EXISTS */ resources
(id INTEGER PRIMARY KEY, /* autoincrement */
start_date VARCHAR(10), /* start date */
start_time VARCHAR(8), /* start time */
site VARCHAR(128), /* request virtualhost */
page VARCHAR(128), /* request page */
execution_time DOUBLE /* run time */
)";
// Создадим таблицу "resources" в базе
@sqlite_query($hf_db, $hf_query);
// функция выполяемая до выхода из скрипта
function hf_shutdown(){
$hf_end_time_mm = microtime(1) - $GLOBALS['hf_start_time_mm'];
// запись данных в базу
$query = "INSERT INTO resources(start_date, start_time, site, page, execution_time)
VALUES ('" . $GLOBALS['hf_start_date'] . "', '" . $GLOBALS['hf_start_time'] . "', '" . $_SERVER["HTTP_HOST"] . "', '" . $_SERVER["REQUEST_URI"] . "', " . $hf_end_time_mm . ");";
//echo $query;
@sqlite_query($GLOBALS['hf_db'], $query);
}
// регистрируем функцию выхода
register_shutdown_function('hf_shutdown');
}
?>
===
не будешь читать описание к функция укушу, ты же делаешь услугу и всегда качественно! так что не отступай от качества и напиши что это пока как тестовое. а то же будут возбухания ...
Re: SQLite - создать таблицу с индексами
Добавлено: 2011-01-13 15:38:56
Alex Keda
тока в таком виде заработало
Код: Выделить всё
<?php
// Создадим базу данных
$hf_db = @sqlite_open($_SERVER["DOCUMENT_ROOT"] . "/../resource_usage.db");
// если база успешно создалась - работаем дальше
if ($hf_db) {
// дата старта
$hf_start_date = date('Y-m-d');
// время старта
$hf_start_time = date('G:i:s');
// время старта с микросекундами
$hf_start_time_mm = microtime(1);
// переменные которые будут нужны в конце
GLOBAL $hf_db;
GLOBAL $hf_start_date;
GLOBAL $hf_start_time;
GLOBAL $hf_start_time_mm;
// запрос на создание таблицы
$hf_query = "CREATE TABLE /* IF NOT EXISTS */ resources
(id INTEGER PRIMARY KEY, /* autoincrement */
start_date VARCHAR(10), /* start date */
start_time VARCHAR(8), /* start time */
site VARCHAR(128), /* request virtualhost */
page VARCHAR(128), /* request page */
execution_time DOUBLE /* run time */
)";
// Создадим таблицу "resources" в базе
@sqlite_query($hf_db, $hf_query);
// функция выполяемая до выхода из скрипта
function hf_shutdown(){
// вычисляем время работы скрипта
$hf_end_time_mm = microtime(1) - $GLOBALS['hf_start_time_mm'];
// запись данных в базу
$query = "INSERT INTO resources(start_date, start_time, site, page, execution_time)
VALUES ('" . $GLOBALS['hf_start_date'] . "',
'" . $GLOBALS['hf_start_time'] . "',
'" . sqlite_escape_string($_SERVER["HTTP_HOST"]) . "',
'" . sqlite_escape_string($_SERVER["REQUEST_URI"]) . "',
" . $hf_end_time_mm . ");";
//echo $query;
@sqlite_query($GLOBALS['hf_db'], $query);
}
// регистрируем функцию выхода
register_shutdown_function('hf_shutdown');
}
?>
махинации с присвоением и глобализацией сразу - не работают
Код: Выделить всё
Parse error: syntax error, unexpected T_GLOBAL in /home/h9357/data/www/get.load.begin.php on line 3