رفتن به مطلب
  • 0

مشکل در cursor در دیتابیس


Majid.2019

سوال

سلام و درود

دوستان یه باگ بدی در دیتابیس برام به وجود اومده موندم چیکار کنم

وقتی من یه کوئری بدم نزدیک 2000تا ثبت داشته باشه بریزم داخل متغییر cursor 

وقتی میام یه کد Cur.RowCount میزنم برنامه نزدیک 5 6 ثانیه بدجوری هنگ میکنه بعد کار میکنه

مگه نباید کتابخانه sql بهینه و به درستی کار کنه پس چرا 1000 ثبت میخواد برگرده سیستم قاط میزنه

راهی نیست اینو برطرف کنم

چون یه برنامه حسابداری درست کردم که بدجوری به مشکل خورده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

8 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در ۱۴۰۰/۱۰/۱۸ در ۰۰:۱۳، Majid.۲۰۱۹ گفته است:

سلام و درود

دوستان یه باگ بدی در دیتابیس برام به وجود اومده موندم چیکار کنم

وقتی من یه کوئری بدم نزدیک 2000تا ثبت داشته باشه بریزم داخل متغییر cursor 

وقتی میام یه کد Cur.RowCount میزنم برنامه نزدیک 5 6 ثانیه بدجوری هنگ میکنه بعد کار میکنه

مگه نباید کتابخانه sql بهینه و به درستی کار کنه پس چرا 1000 ثبت میخواد برگرده سیستم قاط میزنه

راهی نیست اینو برطرف کنم

چون یه برنامه حسابداری درست کردم که بدجوری به مشکل خورده

سلام.

اگه خود جستحوی sql یا کوئریش طول میکشه از این متد هم میشه استفاده کرد

https://www.b4x.com/android/help/sql.html#sql_execqueryasync

اگه حلقه یا لوپتون طول میکشه کتابخونه ای ک اقای شاهپیری گفتن و ترد دیگه بهترین گزینست

ازین روش هم گاهی میشه استفاده کرد ولی به خوبی ترد دیگه نمیشه

For i = 0 To 10000

	If i Mod 100 = 0 Then Sleep(0)
Next

For i = 0 To 50

	Sleep(0)
Next

شاید ساختار دیتابیس یا بقیه کد هاتون هم مشکل داشته باشه

چند ثانیه تاخیر رو من توی خوندن 500000 رکورد یکجا یا بیشتر دیدم و 2000-20000 تا معمولا 50-100 میلیی ثانیه طول میکشه

در اینزرت کردن و کار های دیگه هم (تعداد بیشتر از چند تا) باید حواستون باشه همش رو یکجا انحام بدین نه تکی تکی

https://www.b4x.com/android/help/sql.html#sql_begintransaction

https://www.b4x.com/android/help/sql.html#sql_addnonquerytobatch

دستورات sql غیر از سلکت و اینزرت مقادیر و اطلاعات زیاد یکجا معمولا چند میلی ثانیه طول میکشه و بهینه هست

مثلا اگه دیتابیستون ساختارش درست باشه و ایندکس داشته باشه میتونید یک یا چند رکورد یا اطلاعات لازم رو بین چند میلیون رکورد در کمتر از چند میلی ثانیه پیدا یا ویرایش کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۱۰/۱۸ در 17:57، rasool.g گفته است:

سلام.

اگه خود جستحوی sql یا کوئریش طول میکشه از این متد هم میشه استفاده کرد

https://www.b4x.com/android/help/sql.html#sql_execqueryasync

اگه حلقه یا لوپتون طول میکشه کتابخونه ای ک اقای شاهپیری گفتن و ترد دیگه بهترین گزینست

ازین روش هم گاهی میشه استفاده کرد ولی به خوبی ترد دیگه نمیشه

For i = 0 To 10000

	If i Mod 100 = 0 Then Sleep(0)
Next

For i = 0 To 50

	Sleep(0)
Next

شاید ساختار دیتابیس یا بقیه کد هاتون هم مشکل داشته باشه

چند ثانیه تاخیر رو من توی خوندن 500000 رکورد یکجا یا بیشتر دیدم و 2000-20000 تا معمولا 50-100 میلیی ثانیه طول میکشه

در اینزرت کردن و کار های دیگه هم (تعداد بیشتر از چند تا) باید حواستون باشه همش رو یکجا انحام بدین نه تکی تکی

https://www.b4x.com/android/help/sql.html#sql_begintransaction

https://www.b4x.com/android/help/sql.html#sql_addnonquerytobatch

دستورات sql غیر از سلکت و اینزرت مقادیر و اطلاعات زیاد یکجا معمولا چند میلی ثانیه طول میکشه و بهینه هست

مثلا اگه دیتابیستون ساختارش درست باشه و ایندکس داشته باشه میتونید یک یا چند رکورد یا اطلاعات لازم رو بین چند میلیون رکورد در کمتر از چند میلی ثانیه پیدا یا ویرایش کنید

نه کوئری که نوشتم خیلی سنگین ینی داخلش حسابکتاب میکنه

لامصب 4 ثانیه طول میکشه تا انجام میده

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۱۰/۱۸ در ۲۳:۵۵، Majid.۲۰۱۹ گفته است:

نه کوئری که نوشتم خیلی سنگین ینی داخلش حسابکتاب میکنه

لامصب 4 ثانیه طول میکشه تا انجام میده

این نمونه ها و مثال ها * رو هم ببینید بدرتون میخوره # # یا کاری که میخواید انجام بدید پیچیده تره

* (منبع اموزش عالی برای مباحث پایه - قابل ویرایش و تست انلاین )

کد هاتون رو هم (sql) خیلی راحت تر و سریع تره اول داخل برنامه هایی مثل این تست کنید و وقتی کد مناسب رو پیدا کردید داخل برنامه ی اصلی استفاده کنید # sqlitebrowser

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۱۰/۱۹ در 15:14، rasool.g گفته است:

این نمونه ها و مثال ها * رو هم ببینید بدرتون میخوره # # یا کاری که میخواید انجام بدید پیچیده تره

* (منبع اموزش عالی برای مباحث پایه - قابل ویرایش و تست انلاین )

کد هاتون رو هم (sql) خیلی راحت تر و سریع تره اول داخل برنامه هایی مثل این تست کنید و وقتی کد مناسب رو پیدا کردید داخل برنامه ی اصلی استفاده کنید # sqlitebrowser

من خودم با Navicat 15 for SQLite کار میکنم

اینجا کوئریو زدم 4 ثانیه طول کشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام و درود. به هیچ عنواز از دیتابیس تو نخ اصلی برنامه استفاده نکنید. باید حتما نخ جداگونه ای رو استفاده کنید. از asynctask یا thread ااستفاده کنید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در ۱۴۰۰/۱۰/۲۰ در ۱۸:۴۰، Majid.۲۰۱۹ گفته است:

من خودم با Navicat 15 for SQLite کار میکنم

اینجا کوئریو زدم 4 ثانیه طول کشید

👍 چند میلی ثانیه برای جستجو جمع و گرفتن تعداد ساده و... گفتم من ولی شما اگه کوِئری یا کار پیچیده تر یا خاصی انجام میدید اون تخصصی پایگاه داده و sql میشه دیگه و زمانش و بهینه بودن یا نبودنش معلوم نیست

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...