Страница 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
Гость
ну если не составной то можно UNIQUE задавать сразу в CREATE
http://www.sqlite.org/lang_createtable.html
http://www.sqlite.org/lang_createindex.html

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
Alex Keda писал(а):и так каждый раз при вызове любого php скрипта будет...
нехорошее решение
http://forum.host-food.ru/viewtopic.php?f=15&t=677
ты потерял во многих случаях проверку на коннет и 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

Код: Выделить всё

echo "<CODE><PRE>\n";
не закрыт, нет проверки на 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