Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];
ВнизНе понятно что удерживает таблицу Найти похожие ветки
← →
kyn66 © (2009-10-29 16:14) [80]
> Anatoly Podgoretsky © (29.10.09 16:11) [77]
Очень доходчиво и поучительно. Спасибо.
← →
Anatoly Podgoretsky © (2009-10-29 16:16) [81]> Inovet (29.10.2009 16:12:18) [78]
Индексы тоже, их же перестраивать нужно.
← →
kyn66 © (2009-10-29 16:23) [82]
> Inovet © (29.10.09 16:12) [78]
> > [75] kyn66 © (29.10.09 16:04)> Не понятно, почему SQL
> так долго удаляетНу первое что приходит на ум - индексы
> не подходящие под условие WHERE, или вообще их нет.
Да нет, индексы есть, правда составной по двум полям "Tir;Nom" - к примеру и вот удаляю так
...
SQL.Add("DELETE FROM TiragSL WHERE Tir = :p1");
Params[0].Value := tir;
ExecSQL;
...
Tir - как раз и есть поле с индексом. Пардон, удаляю с таблицы, в которой 2937140 записей, если это что изменит.
← →
kyn66 © (2009-10-29 16:26) [83]Может как раз то что таблица имеет индексы и при удалении записи переиндексируются, а это занимает определенное время. Может как вариант перед удалением записей удалить индексы (индексный файл) и потом уже их пересоздать заново, на новом наборе записей?
← →
Inovet © (2009-10-29 16:39) [84]> [82] kyn66 © (29.10.09 16:23)
Да вроде всё нормально, но 30 секунд многовато, как будто индекс не используется
> [83] kyn66 © (29.10.09 16:26)
> вариант перед удалением записей удалить индексы (индексный
> файл) и потом уже их пересоздать заново, на новом наборе
> записей?
Файл сам удалится при удалении последнего индекса, только вот для DELETE они нужны как раз нужны. А для текущей задачи вообще без условия и без индексов удаление, только для DBF в отличии от ADT на место удалённых новые не будут записываться, а будут в конец.
← →
Anatoly Podgoretsky © (2009-10-29 16:48) [85]> kyn66 (29.10.2009 16:26:23) [83]
Такой метод существует, только тебе же удалить все записи, а ты почему то про WHERE завел речь
DELETE {*/ALL} FROM Tbl
← →
Anatoly Podgoretsky © (2009-10-29 16:49) [86]> Inovet (29.10.2009 16:39:24) [84]
Для полного удаления, как раз индексы не нужны, только лишний тормоз.
← →
Inovet © (2009-10-29 16:59) [87]> [86] Anatoly Podgoretsky © (29.10.09 16:49)
> > Inovet (29.10.2009 16:39:24) [84]
>
> Для полного удаления, как раз индексы не нужны, только лишний
> тормоз.
Я это специально подчеркнул
> [84] Inovet © (29.10.09 16:39)
> А для текущей задачи вообще без условия и без индексов удаление
Ещё о временной таблице я говорил имя начинается с "#" будет видна только в текущем соединении.
← →
kyn66 © (2009-10-29 17:22) [88]
> Anatoly Podgoretsky © (29.10.09 16:48) [85]
> > kyn66 (29.10.2009 16:26:23) [83]Такой метод существует,
> только тебе же удалить все записи, а ты почему то про WHERE
> завел речь
В данном случае было ответвление небольшое на другую тему [72] Там удаление выполнялось выборочно. Это задета тема касаемо метода DELETE FROM Tbl
← →
kyn66 © (2009-10-29 17:24) [89]
> Inovet © (28.10.09 19:52) [54]
> Потом под временные лучше временные и применять #Cps1tbl
Пардонс, упустил этот момент. Не слыхал про такой. Подробнее можно?
← →
Inovet © (2009-10-29 17:35) [90]> [89] kyn66 © (29.10.09 17:24)
>
> > Inovet © (28.10.09 19:52) [54]
> > Потом под временные лучше временные и применять #Cps1tbl
>
> Пардонс, упустил этот момент. Не слыхал про такой. Подробнее
> можно?
Во всём аналогичны обычным таблицам, только видны в текущем Connection, т.е. одно имя можно использовать, например, в сети и не заботиться о конфликтах, хранятся в каталоге %TEMP%, при закрытии соединения все удаляются, имя начинается с #. Не помню в какой версии ADS появились.
← →
kyn66 © (2009-10-29 17:40) [91]
> Inovet © (29.10.09 17:35) [90]
Т.е. имя присваивается компонентту TADsTable?
Типа TADsTable.Name := "#Cps1Tbl" ?
← →
kyn66 © (2009-10-29 17:49) [92]Description
CreateTable is used to create a new table defined by the current dataset"s field definitions. If the table already exists, CreateTable will overwrite the table’s data and structure. To avoid overwriting an existing table, check the Exists property before calling CreateTable. If the name of the table begins with the # character, the newly created table will be a temporary table that is only visible on the current connection.
Т.е. получается что ее можно создать во время работы программы. Да я делал и простое создание с последующим удалением физически с диска. А эта временная... потом полями ее набивать...
← →
Inovet © (2009-10-29 17:53) [93]> [91] kyn66 © (29.10.09 17:40)
>
> > Inovet © (29.10.09 17:35) [90]
>
>
> Т.е. имя присваивается компонентту TADsTable?
> Типа TADsTable.Name := "#Cps1Tbl" ?
Не, компонент - это обёртка над API.
Examples:// Create a temporary table named Temp1 with two columns
CREATE TABLE #Temp1 ( Name Char( 30 ), seqid integer );
// Пользуемся
INSERT INTO #Temp1 (Name, seqid) VALUES ("Test 123", 123)
SELECT * FROM #Temp1
// Можно удалить или удалится при закрытии Connection
DROP TABLE #Temp1
Ещё из справки пример// This example creates two temporary tables for intermediate results
// Step 1. Create a temporary table named DeptCount and at the same time
// populate it with summary data from an existing table in the
// database
SELECT deptnum, count(*) as NumEmployees
INTO #DeptCount
FROM employees
GROUP BY deptnum
// Step 2. Create another temporary table named LocCount which list the
// number of employees in each location for each department.
SELECT deptnum, location, count(*) as cnt
INTO #LocCount
FROM employees
GROUP BY deptnum, location
// Finally using the 2 temporary tables to list the percent of employee
// on each location for each department
SELECT a.deptnum, a.location, ( a.cnt * 100 ) / b.NumEmployees As PercentAtLocation
FROM #LocCount a, #DeptCount b
WHERE a.deptnum = b.deptnum
← →
Dennis I. Komarov © (2009-10-29 17:55) [94]
> Т.е. имя присваивается компонентту TADsTable?
> Типа TADsTable.Name := "#Cps1Tbl" ?
Суров...
← →
kyn66 © (2009-10-29 18:00) [95]
> Inovet © (29.10.09 17:53) [93]
Да , спасибо, уже сам нашел в хэлпе...
Страницы: 1 2 3 вся ветка
Форум: "Начинающим";
Текущий архив: 2009.12.13;
Скачать: [xml.tar.bz2];
Память: 0.62 MB
Время: 0.011 c