|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||||||
Как правильно обновить id после удаления записи11.12.2023, 18:15. Показов 9792. Ответов 96
Метки нет (Все метки)
Всех приветствую. У меня есть таблица,в которой первичный ключ не autoincrement rowid,поэтому я сам создал колонку rowid:
0
|
|||||||||||
| 11.12.2023, 18:15 | |
|
Ответы с готовыми решениями:
96
FireBase + RecyclerView| как обновить список, после удаления item из базы? Как обновить datagridview после добавления записи? |
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||||||||
| 13.12.2023, 23:22 [ТС] | |||||||||||||
По сути id постов у меня отдаётся сервером. Да,мне нужно,чтобы посты отображались в порядке добавления (Колонка ROWID) и чтобы на страницу было н постов.
0
|
|||||||||||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
||||||
| 14.12.2023, 00:32 | ||||||
|
Если не собираетесь обновлять тысячи раз за сутки поля, то о ресурсе флеш можете не задумываться. (хотя Вы как раз собираетесь обновляя счетчик)
Если уж так заботитесь о ресурсе флеша, то минимизируйте операции модификации данных. т.е. один раз добавили и не трогаем, дальше только читаем. Все очень просто, если строки короткие то их больше помещается в одной странице, как следствие меньше операций чтения. Иногда полезно вынести большие поля по которым не будет вестись поиск в отдельную таблицу. И получать из нее данные после выборки. Таким образом не нужно вычитывать бесполезные данные за зря. Не очень понятно чем unique поможет в оптимизации. А вот индекс уникальный поможет. И пример с триггерами Кликните здесь для просмотра всего текста
пример оптимизаций offset выше привел, row_number() без разницы по какому полю по поводу "вероятность переполнения ROWID", вообще не стоит беспокоится в Вашем случае
0
|
||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 14.12.2023, 01:53 [ТС] | |
|
Огромное Вам спасибо. Дело в том,что id - это идентификатор поста,который отдаёт сервер. Я его сделал первичным ключом,а rowId сделал колонкой,которая почти как autoincrement,правда я ей сам присваиваю значения. Не знал,что можно создавать не уникальные колонки,но уникальный индекс. Получается,если в эту колонку вставить повторяющееся значение,то не будет ошибки из-за того,что был создан уникальный индекс,а значение не уникально? По поводу длинных строк понял,хотя это,конечно,усложнит запрос,т.к я буду часто выбирать и эти длинные строки. Только непонятно почему если они будут в общей таблице,а не в отдельной,будет выполняться больше операций чтения,ведь я по-любому почти всегда буду их выбирать кроме,к примеру,случая когда мне надо будет узнать,есть ли пост в избранном (тогда я просто буду выбирать id,который не autoincrement и который приходит с сервера). А,сейчас догадался. Возможно это связано с тем,что Вы их поместили в представление. Кстати почему во второй таблице,я имею ввиду таблицу favouritePostsTableNamecontent поле id unique,но не первичный ключ. Вообще,на мой взгляд,очень странно,что при использовании ключевого слова unique sqlite не пытается оптимизировать мой запрос,ведь я же явно сообщаю,что колонка первичный ключ,или просто уникальная (в зависимости от оператора).
0
|
|
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
||||||||||
| 14.12.2023, 08:30 | ||||||||||
0
|
||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||||||||||
| 14.12.2023, 16:23 [ТС] | |||||||||||||||
|
Огромное Вам спасибо. Забыл спросить ещё некоторые детали. Почему для контента Вы не создали уникальный индекс,т.е вместо
0
|
|||||||||||||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
|||||||||||||||||||||
| 14.12.2023, 16:55 | |||||||||||||||||||||
В принципе через триггер на представление можно манипулировать обоими таблицами см. пример тут https://club.shelek.ru/viewart.php?id=353. Хотел накидать пример но потом стало лень, уж извините.
0
|
|||||||||||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||
| 14.12.2023, 21:31 [ТС] | |||
0
|
|||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
|||||||||||||||||||||||||||||||||
| 14.12.2023, 22:30 | |||||||||||||||||||||||||||||||||
Для составного первичного ключа индекс создается автоматически Для внешних ключей индексы не создаются, но хорошей практикой будет их создать для увеличения скорости поиска Составной индекс нужен если нужна уникальность комбинации полей (уникальный индекс) или если как написали в пример поиск идет сразу по двум полям
Ниже код создания бд по моему мнению оптимальной для Вас. Кликните здесь для просмотра всего текста
0
|
|||||||||||||||||||||||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||||||
| 14.12.2023, 23:46 [ТС] | |||||||||||
Добавлено через 27 минут
0
|
|||||||||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
||||||||||||||
| 15.12.2023, 00:39 | ||||||||||||||
0
|
||||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||
| 15.12.2023, 01:51 [ТС] | |||||
Добавлено через 23 минуты
0
|
|||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
||||||
| 15.12.2023, 07:14 | ||||||
|
>сли бы,к примеру,для категорий/тегов у нас тоже была бы ячейка rowid,как первичный ключ,то нам тоже не нужно было бы создавать для ассоциативной таблицы составной индекс,зато кроме поста нам надо было бы создать индекс в ассоциативной таблице для категории/тега т.е для id,который приходит для них с сервера.
так как колонка id объявлена INTEGER primary key то теперь она является rowid. В таблице связи применяется составной первичный ключ что бы обеспечить уникальность тегов/категорий т.е. что бы не было двух одинаковых тегов у поста. на самом деле если сделать запрос
>По поводу уникального индекса понял,правда ещё остался вопрос почему мы создаём индекс только для ассоциативной таблицы,ведь в запросах мы можем сравнивать id с этой таблице с id в таблице с постами/категориями,а значит для таблицы с постами тоже нужен индекс по полю id,т.к оно не является первичным ключом. На колонки rowid или их заменители, которые объявлены с типом INTEGER primary key, уникальный индекс создается сам по себе тз-за особенностей хранения данных >Но почему-то человек жалуется в посте,что в разных случаях он работает по-разному,к примеру если прибавлять к нему 1. Попробовал на таблице с 2 млн записей, работает одинаково быстро. >Очень жаль,что sqlite под android не поддерживает мультикомандный режим,т.е можно выполнить только один запрос в одном методе. Ни чего страшного разбейте на 3 обращения к бд должно работать одинаково, главное что бы параллельно ни кто не пытался писать в бд. >Так мы же можем поставить unique для id поста,категории и тега в соответствующих таблицах. Тогда и дополнительных индексов,наверное,создавать будет не нужно. Ведь я могу гарантировать,что с сервера придёт уникальный id,а в ассоциативных таблицах у нас будет составной первичный ключ. primary key сразу предполагает что поле уникальное, т.е. однозначно определяет строку. В приведенном пример id поста который пришел с сервера это колонка idPost, ее можно сделать уникальной при необходимости. колонка id ведется в sqlite и нужна не только как первичный ключ но и маркер порядка добавления >Кстати раз для primary key индексы не нужны,min и max для них будут работать без проблем? Да, верно. Но я бы использовал last_insert_rowid(). Странно что ее нет в API отдельно.
0
|
||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
||||
| 15.12.2023, 14:22 [ТС] | ||||
0
|
||||
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
|||||||||||||||||
| 15.12.2023, 14:55 | |||||||||||||||||
- Дата - в формате число - Время в формте число - само значение Если отсортировать по колонкам дата затем время то получим аналог индекса по двум колонкам. Что бы найти значение по дате и времени мы быстро листаем в нужную позицию и берем значение. На компьютере используется двоичный поиск а мы визуально можем определить где в документе примерно находится интересующая точка. Если нужно найти все значения на дату или диапазон дат то это тоже быстро сделать, так как первая сортировка сделана по дате то все даты будут сгруппированы в определенном месте (странице). Если же нам нужно будет найти все значения которые был с полуночи до 6 утра, не важно какой даты, то окажется что данные разбросаны по все таблице и проще просканировать всю таблицу с начала Но, если мы отсортируем только по времени (индекс по второму столбцу) то интересующие значения опять будут сгруппированы в одном месте.
0
|
|||||||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
||||
| 15.12.2023, 16:05 [ТС] | ||||
0
|
||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
||||||||||||
| 15.12.2023, 16:14 | ||||||||||||
0
|
||||||||||||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|||||||
| 15.12.2023, 17:33 [ТС] | |||||||
0
|
|||||||
|
5393 / 1465 / 513
Регистрация: 31.05.2012
Сообщений: 5,153
|
||
| 15.12.2023, 18:00 | ||
|
если формально рассуждать то второй лучше. но и тот с in формально очень плохой - по каждой строке из tags выполняется подзапрос. но есть оптимизатор и он может перевернуть с ног на голову или наоборот. поэтому и смотреть план нужно. насколько оптимизатор хорош у sqlite не в курсе
Добавлено через 18 минут
0
|
||
|
17 / 5 / 0
Регистрация: 16.04.2016
Сообщений: 344
|
|
| 15.12.2023, 19:01 [ТС] | |
|
Ну тут,на мой взгляд,хорошего запроса не будет т.к,если рассуждать с точки зрения обычных языков программирования,нужно проитерировать по ассоциативной таблице с постами/категориями/тегами и для каждого id проверить не равен ли,допустим,второй столбец,к примеру,id поста. Если равен,добавить в массив первый столбец. Затем проитерировать по таблице с категориями и выбрать те из них,в которых id равен какому-то из элементов массива,каждый раз итерируя по этому массиву. Кстати почему Вы вместо,к примеру,left join используете просто join?
Добавлено через 5 минут Так я и рассчитываю,что в ассоциативной таблице строки удалятся,а значит не будет существовать запроса на выборку id категории из ассоциативной таблицы с нужным id поста,а значит категорию можно удалять. Добавлено через 12 минут Хотя нет,он работать не будет,т.к я уже сделал первичным ключом ROWID (на всякий случай для всех таблиц,хотя в тз должны показываться только посты в порядке добавления),а значит надо или в java коде хранить для каждого поста ROWID,или вначале выбирать rowid,а потом проделывать с ним соответствующие операции,т.к хоть я ещё не проверял,но не факт,что sqlite даст мне создать ассоциативную таблицу,если первое и второе поле не первичные ключи,т.к у меня была похожая проблема,когда я пытался создать ассоциативную таблицу с составным первичным ключом,но одно из полей главной таблицы не было первичным ключом. Добавлено через 21 минуту Хотя нет,всё норм,т.к я не использую id поста. Мне просто будет нужно заменить id на ROWID.
0
|
|
|
919 / 292 / 58
Регистрация: 01.06.2023
Сообщений: 816
|
|||||||||||||||
| 18.12.2023, 08:58 | |||||||||||||||
В том пример что я привел индекс по двум полям (idTag, idPost) создан автоматически так как первичный ключ составной. И в случае поиска по idTag будет просканирован только индекс без просмотра самой таблицы - что означает меньше операций чтения с диска.
0
|
|||||||||||||||
| 18.12.2023, 08:58 | |
|
Как правильно обновить DataGrid после добавления строки
Обновить грид после удаления из бд
Список файлов в listView. Как убрать пути и обновить список после удаления элемента Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
После бана на пикабу заблокировали авторизацию аккаунта с яндекса.
Hrethgir 09.07.2026
В частности https:/ / auto. ru/ logbook/ zapret-na-vozhdenie-posle-65-let_1cf28789-07b4-4c75-a2f7-4cd4edf9deeb тут хотел оставить комментарий такой
Зрите в корень - монополизация на разработку программ. . .
|
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
|
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
|
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал.
Оно само - говорит.
Кто слышит тот слышит.
|
|
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было
ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась.
Первый вариант. . .
|
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2.
Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
|
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет.
Но обычно это 50 лет и более.
Наверное, закисление почвы происходит сезонно в средней. . .
|
В чем ценность человеческого опыта в глобальном смысле?
kumehtar 03.07.2026
Возможно, ценность человека не в том, что он однажды достигает мудрости, а в том, что он становится носителем карты пути. Он знает не только истину, но и последовательность внутренних изменений,. . .
|