За последние 24 часа нас посетили 22490 программистов и 1110 роботов. Сейчас ищут 618 программистов ...

Подскажите почему так?

Тема в разделе "PHP и базы данных", создана пользователем Artur_hopf, 6 апр 2020.

  1. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    Добрый день.
    Допустим есть такой запрос
    PHP:
    1. SELECT TOP (1000) *
    2. FROM [table]
    3. WHERE [Reader] = '0B70CB43-9EEF-49BB-A567-F0446BF5E793'
    4. ORDER BY [Date] DESC
    Время выполнения этого запроса:
    PHP:
    1. (затронуто строк: 1000)
    2.  
    3. Время работы SQL Server:
    4.   Время ЦП = 46 мс, затраченное время = 50 мс.
    Берем тот же запрос, но выберем теперь дону строку:
    PHP:
    1. SELECT TOP (1) *
    2. FROM [table]
    3. WHERE [Reader] = '0B70CB43-9EEF-49BB-A567-F0446BF5E793'
    4. ORDER BY [Date] DESC
    Время выполнения запроса:
    PHP:
    1. (затронута одна строка)
    2.  
    3. Время работы SQL Server:
    4.    Время ЦП = 5094 мс, затраченное время = 5110 мс.
    Почему так?
    Мне выгодно запросить 1000 строк, и из них выбрать одну в PHP
     
  2. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    MS SQL ?

    про него точно не скажу, но думаю дело в группировках
    еще попробуйте explain сделать
     
  3. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ADSoft да MSSQL. Я первую сейчас строку в php забираю, просто было интересно почему он так отрабатывает.
    А так два рабочих варианта.
    Или такой sql запрос:
    PHP:
    1. SELECT TOP (1) *
    2. FROM(
    3.    SELECT TOP (1000) *
    4.    FROM [table]
    5.    WHERE [Reader] = '0B70CB43-9EEF-49BB-A567-F0446BF5E793'
    6.    ORDER BY [Date] DESC
    7. ) AS tb1
    Или в php забрать первую строку, что я сейчас и делаю:
    PHP:
    1. $result = Yii::$app->db->createCommand($sql)->queryOne();
     
  4. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    непосредственно в MS SQL сделайте запрос и посмотрите как там....
    ну и про explain не забываем .... надеюсь на Reader индекс есть в таблице?
     
  5. Artur_hopf

    Artur_hopf Активный пользователь

    С нами с:
    7 май 2018
    Сообщения:
    2.266
    Симпатии:
    405
    @ADSoft да я там и смотрю. Кста слух, ты же из Татарстана. У вас в городе больные есть? Я сейчас в офисе сижу, у нас один сотрудник контактировал с короновирусным, дома сидит. А официально в городе заболевших нет =)

    я из НК если что)
    --- Добавлено ---
    Вот дамп создания таблицы:
    PHP:
    1. USE [database]
    2. GO
    3.  
    4. /****** Object:  Table [dbo].[table]    Script Date: 06.04.2020 10:40:00 ******/
    5. SET ANSI_NULLS ON
    6. GO
    7.  
    8. SET QUOTED_IDENTIFIER ON
    9. GO
    10.  
    11. CREATE TABLE [dbo].[table](
    12.     [Oid] [uniqueidentifier] ROWGUIDCOL  NOT NULL,
    13.     [Reader] [uniqueidentifier] NULL,
    14.     [Label] [uniqueidentifier] NULL,
    15.     [Date] [datetime] NULL,
    16.     [Status] [int] NULL,
    17.     [Duration] [int] NULL,
    18.     [OptimisticLockField] [int] NULL,
    19.     [GCRecord] [int] NULL,
    20. CONSTRAINT [PK_RFIDData] PRIMARY KEY CLUSTERED
    21. (
    22.     [Oid] ASC
    23. )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    24. ) ON [PRIMARY]
    25. GO
    Вроде все по правилам, в общем ладно. Просто спросил.
     
  6. ADSoft

    ADSoft Старожил

    С нами с:
    12 мар 2007
    Сообщения:
    3.823
    Симпатии:
    736
    Адрес:
    Татарстан
    ну я не вижу тут что Reader - key
    вопросы не по тематике форума - в ЛС
     
  7. SibBear

    SibBear Новичок

    С нами с:
    4 апр 2020
    Сообщения:
    127
    Симпатии:
    7
    индексация спасет мир.
    в общем мне просто стало интересно, поковырявшись очень частая проблема оказывается. ms как то интересно работает, он начинает шерстить всю базу в поисках, сортировать ее, поиск оптимального пути и после выдачу результата. В общем очень умная вешчь, которая если ей не тыкнуть носом будет умничать. Спасает индекс по нужному полю.
    цитата с гугла
    собственно поэтому для него взять ВСЕ быстрее чем отсортировать это ВСЕ и выдать ОДЫН. Простая человеческая логика, человеки же писали ее)))