Клубове Дир.бг
powered by diri.bg
търси в Клубове diri.bg Разширено търсене

Вход
Име
Парола

Клубове
Dir.bg
Взаимопомощ
Горещи теми
Компютри и Интернет
Контакти
Култура и изкуство
Мнения
Наука
Политика, Свят
Спорт
Техника
Градове
Религия и мистика
Фен клубове
Хоби, Развлечения
Общества
Я, архивите са живи
Клубове Дирене Регистрация Кой е тук Въпроси Списък Купувам / Продавам 17:32 30.06.24 
Клубове/ Компютри и Интернет / Бази данни Пълен преглед*
Информация за клуба
Тема Бавен SQL израз
Автор Tetra (Lifche)
Публикувано11.12.03 21:35  



Здравейте,
имам една таблица, в която записвам информацията за камиони


mysql> describe Truck;
+-------------+-----------------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+-----------------------+------+-----+---------------------+-------+
| tID | mediumint(8) unsigned | | PRI | 0 | |
| tUserID | smallint(5) unsigned | | MUL | 0 | |
| tType | tinyint(3) unsigned | | | 0 | |
| tCountry | tinyint(3) unsigned | | | 0 | |
| tModel | smallint(5) unsigned | | | 0 | |
| tCabin | tinyint(3) unsigned | | | 0 | |
| tSupStruct | tinyint(3) unsigned | | | 0 | |
| tEkoNorm | tinyint(3) unsigned | | | 0 | |
| tSpeedBox | tinyint(3) unsigned | | | 0 | |
| tHang | tinyint(3) unsigned | | | 0 | |
| tFuel | tinyint(3) unsigned | | | 0 | |
| tAxisConfig | tinyint(3) unsigned | | | 0 | |
| tAxisCount | tinyint(3) unsigned | | | 0 | |
| tTirePCAxis | tinyint(3) unsigned | | | 0 | |
| tTireCol | decimal(4,2) | | | 0.00 | |
| tLPacket | enum('N','Y') | | | N | |
| tPower | smallint(5) unsigned | | | 0 | |
| tWeight | tinyint(3) unsigned | | | 0 | |
| tUsefulLoad | tinyint(3) unsigned | | | 0 | |
| tFirstReg | varchar(4) | | | | |
| tKM | mediumint(8) unsigned | | | 0 | |
| tPrice | mediumint(8) unsigned | | | 0 | |
| tValute | tinyint(3) unsigned | | | 0 | |
| tInfo | text | | | | |
| tPics | tinyint(3) unsigned | | | 0 | |
| tTimeAdd | datetime | | | 0000-00-00 00:00:00 | |
+-------------+-----------------------+------+-----+---------------------+-------+
26 rows in set (0.00 sec)


Външните таблици към нея са за колoните:
tType, tCountry, tModel, tCabin, tEkoNorm, tSpeedBox, tHang, tFuel, tAxisConfig, tValute

Всяка от тези външи таблици има структура като тази:


mysql> describe TruckEkoNorm;
+---------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+---------------------+------+-----+---------+-------+
| tenID | tinyint(3) unsigned | | PRI | 0 | |
| tenName | varchar(30) | | | | |
+---------+---------------------+------+-----+---------+-------+
2 rows in set (0.00 sec)


Като изключение прави само таблицата Model:


mysql> describe TruckModel;
+-------------+----------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-------------+----------------------+------+-----+---------+-------+
| tmModelID | smallint(5) unsigned | | PRI | 0 | |
| tmMarkID | tinyint(3) unsigned | | | 0 | |
| tmModelName | varchar(30) | | | | |
+-------------+----------------------+------+-----+---------+-------+
3 rows in set (0.00 sec)


в която записвам кой модел към коя марка се отнася. За това и в главната таблица няма поле за марка, защото чрез модела мога да разбера коя е марката.

В основната, както и в релативните таблици има по 5-6 реда. И въпреки това заявката се изпълнява за 3-7 секунди !
Ето и самата заявка, ако на някой му се занивава да я чете, мисля че е свързана правилно.

SELECT tID, tUserID, tType, ttName AS tTypeName, tCountry, cName AS tCountryName, tmID AS tMark, tmName AS tMarkName, tModel, tmModelName AS tModelName, tCabin, tcName AS tCabinName, tSupStruct, tEkoNorm, tenName AS tEkoNormName, tSpeedBox, tsbName AS tSpeedBoxName, tHang, thName AS tHangName, tFuel, tfName AS tFuelName, tAxisConfig, tacName AS tAxisConfigName, tAxisCount, tTirePCAxis, tTireCol, tLPacket, tPower, tWeight, tUsefulLoad, tFirstReg, tKM, tPrice, tValute, vSig AS tValuteName, tInfo, tPics, tTimeAdd, DATE_FORMAT(tTimeAdd, "%H:%i %d.%m.%Y") AS tTimeAddF
FROM Truck, TruckType, TruckMark, TruckModel, TruckCabin, TruckEkoNorm, TruckSpeedBox, TruckHang, TruckFuel, TruckAxisConfig, Country, Valute, ValuteRates
WHERE tType = ttID AND tCountry = cID AND (tModel = tmModelID AND tmMarkID = tmID) AND tCabin = tcID AND tEkoNorm = tenID AND tSpeedBox = tsbID AND tHang = thID AND tFuel = tfID AND tAxisConfig = tacID AND (tValute = vID AND tValute = vrID) AND tUserID = 27 ORDER BY tID LIMIT 0, 10;

Експлайна:

+-----------------+--------+---------------+---------+---------+---------------------+------+---------------------------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-----------------+--------+---------------+---------+---------+---------------------+------+---------------------------------------------+
| Truck | ALL | user | NULL | NULL | NULL | 6 | where used; Using temporary; Using filesort |
| TruckModel | eq_ref | PRIMARY | PRIMARY | 2 | Truck.tModel | 1 | |
| TruckMark | eq_ref | PRIMARY | PRIMARY | 1 | TruckModel.tmMarkID | 1 | |
| TruckFuel | ALL | PRIMARY | NULL | NULL | NULL | 1 | where used |
| Country | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tCountry | 1 | |
| TruckEkoNorm | ALL | PRIMARY | NULL | NULL | NULL | 5 | where used |
| TruckSpeedBox | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tSpeedBox | 1 | |
| TruckHang | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tHang | 1 | |
| TruckType | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tType | 1 | |
| TruckAxisConfig | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tAxisConfig | 1 | |
| TruckCabin | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tCabin | 1 | |
| Valute | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tValute | 1 | |
| ValuteRates | eq_ref | PRIMARY | PRIMARY | 1 | Truck.tValute | 1 | Using index |
+-----------------+--------+---------------+---------+---------+---------------------+------+---------------------------------------------+
13 rows in set (2.70 sec)


Truck - основната таблица, се сканира цялата, защото всички редове в нея са към един user и индекса не се използва.
Не мога да разбера защо таблици като TruckFuel се сканират целите, докато например TruckCabin не.

Изобщо не мога да зацепя защо е толкова бавен, експлайна е добър, като изключим двата скана извън основната таблица.

Имам и още една таблица, с много подобна структура, дори се взимат доста повече данни и то свързани по по-сложен начин отколкото тук, но принципно е почти същото, за която нямам никакви проблеми, и си върви като пушка.

Какво му е грешното, дето не го виждам ?

MySQL 3.23.49a-Max, InnoDB

Поздрави ;)



Цялата тема
ТемаАвторПубликувано
* Бавен SQL израз Tetra   11.12.03 21:35
. * Re: Бавен SQL израз salle   12.12.03 00:06
. * Re: Бавен SQL израз Tetra   12.12.03 10:03
. * Re: Бавен SQL израз ro6avia   12.12.03 17:26
Клуб :  


Clubs.dir.bg е форум за дискусии. Dir.bg не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Dir.bg
За Забележки, коментари и предложения ползвайте формата за Обратна връзка | Мобилна версия | Потребителско споразумение
© 2006-2024 Dir.bg Всички права запазени.