SQLite - создать таблицу с индексами

MySQL/PostgreSQL/SQLite/Oracle/M$SQL/....

Модератор: terminus

Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-09 15:12:28

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

// запрос на создание таблицы
$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)
полдня уже бьюсь - нифига не понятно. все всегда создают тока первичный сразу, остальное потом.
мне это варинат не очень катит
Убей их всех! Бог потом рассортирует...

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
unix-admin
ст. сержант
Сообщения: 324
Зарегистрирован: 2010-11-26 12:43:04
Откуда: Cornucopia

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение unix-admin » 2011-01-10 9:49:41

нужен составной 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

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-10 23:02:15

нужен просто индекс. поле не уникальное.

маны курил. просветления не принесли.

в примерах, кстати, тока с примари кеем конструкция.
у меня похоже и сделано.
мне надо сразу ещё три индекса по трём полям
Убей их всех! Бог потом рассортирует...

Аватара пользователя
unix-admin
ст. сержант
Сообщения: 324
Зарегистрирован: 2010-11-26 12:43:04
Откуда: Cornucopia

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение unix-admin » 2011-01-10 23:35:22

[quote="Alex Keda"]нужен просто индекс. поле не уникальное.

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

CREATE TABLE something (column1, column2, PRIMARY KEY (column1, column2));
Такой простоиндекс?

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-10 23:41:41

от блин.
вот как это выглядит в 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
Убей их всех! Бог потом рассортирует...

Аватара пользователя
unix-admin
ст. сержант
Сообщения: 324
Зарегистрирован: 2010-11-26 12:43:04
Откуда: Cornucopia

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение unix-admin » 2011-01-11 10:08:56

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));

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-11 23:29:03

неа. такой индекс не нужен
выборки будут максимум по start_date+site
Убей их всех! Бог потом рассортирует...

Аватара пользователя
unix-admin
ст. сержант
Сообщения: 324
Зарегистрирован: 2010-11-26 12:43:04
Откуда: Cornucopia

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение unix-admin » 2011-01-12 0:45:32

Alex Keda писал(а):неа. такой индекс не нужен
выборки будут максимум по start_date+site
максимум-минимум можно под себя докрутить...

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-12 9:21:25

хотелось решение искаропки.
яный пень что индексы я и руками нужные могу проставить
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Gamerman » 2011-01-12 12:24:07

А в чем проблема 2 запроса подряд отправить? Сначала создали, потом индексы прикрутить?
Что-то это напоминает мне старые ФоксПрошные базы. Сначала таблица, потом индексы.
Глюк глюком вышибают!

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-12 16:09:22

та не проблема
задача максимально ускорить сей процесс.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Gamerman » 2011-01-12 17:39:28

За счет чего может быть предполагаемое ускорение?
В одном пакете 2 запроса можно отправить?

Никогда с скюлайтом не работал, могу бред нести :)
Глюк глюком вышибают!

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-12 17:42:49

я тоже =))

насколкьоя понимаю - движок встроен прям в php, база открылась на коннекте
дальше уже неважно - все запросы - время.
тока на парсинге строки в файле выиграешь, но это очень мало.
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Gamerman » 2011-01-12 17:50:19

Думаю, что не стоит заморачиваться, 2 запроса подряд отправить да и все.
Глюк глюком вышибают!

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-12 17:53:40

и так каждый раз при вызове любого php скрипта будет...
нехорошее решение
http://forum.host-food.ru/viewtopic.php?f=15&t=677
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Gamerman » 2011-01-12 18:06:24

Насколько я знаю, при определенных условиях (как правило по умолчанию) php при работе с Мускулем делает так (для каждого запроса):
1. Подключение.
2. Авторизация.
3. Выполнение запроса.
4. Возврат выборки.
5. Закрытие сессии.

Если и скюлайтом так же, то действительно - неоптимально.
Глюк глюком вышибают!

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-12 21:39:37

нет. вы неправы.
конект, обычно, один на обработку страницы.
запросов может быть много. до сотен и тысяч.
закрытие сессии - после отрабоки php кода
Убей их всех! Бог потом рассортирует...

Аватара пользователя
Gamerman
капитан
Сообщения: 1723
Зарегистрирован: 2009-05-17 21:01:23
Откуда: Украина, Ужгород - Днепр
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Gamerman » 2011-01-12 22:23:00

Да, я ошибся.
Хотел, сказать, что после формирования страницы коннект закрывается.
Глюк глюком вышибают!

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение thefree » 2011-01-12 22:50:09

Alex Keda писал(а):и так каждый раз при вызове любого php скрипта будет...
нехорошее решение
http://forum.host-food.ru/viewtopic.php?f=15&t=677
ты потерял во многих случаях проверку на коннет и exit("no connect") это вандализм т.к. там только int
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-12 23:30:27

в смысле
Убей их всех! Бог потом рассортирует...

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение thefree » 2011-01-13 9:59:45

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

рассматривай вопрос в том, что абонент дурак и он задаст вопрос а почему у меня белая страница!
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-13 10:17:50

теги незакрытые - пофиг, это html, переварит. мне краткость кода была важна
а остальное - реально, не подумал.

спасибо, пофиксил
Убей их всех! Бог потом рассортирует...

Аватара пользователя
thefree
лейтенант
Сообщения: 980
Зарегистрирован: 2008-12-29 9:23:19
Откуда: Весёлая Страна

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение thefree » 2011-01-13 12:36:06

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');
}
?>
===
не будешь читать описание к функция укушу, ты же делаешь услугу и всегда качественно! так что не отступай от качества и напиши что это пока как тестовое. а то же будут возбухания ...
Не судите меня строго, Я не волшебник, а только учусь!
http://planetbsd.ru - RSS-агрегатор *BSD по Рунету

Аватара пользователя
Alex Keda
стреляли...
Сообщения: 35456
Зарегистрирован: 2004-10-18 14:25:19
Откуда: Made in USSR
Контактная информация:

Re: SQLite - создать таблицу с индексами

Непрочитанное сообщение Alex Keda » 2011-01-13 15:38:56

тока в таком виде заработало

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

<?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
Убей их всех! Бог потом рассортирует...