Материал: Using_MySql,_MS_SQL_Server_and_Oracle

Внимание! Если размещение файла нарушает Ваши авторские права, то обязательно сообщите нам

Пример 3: использование функции COUNT и оценка её производительности

fwi_nn — поле с индексом без NULL^B («field, with index, no nulls») (число).

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 25/545

Пример 3: использование функции COUNT и оценка её производительности

dm MySQLР

test_counts

«column»

*PK id: INT fni: INT fwi: INT

*fni_nn: INT

*fwi_nn: INT

«PK»

+PK_test_cou nts(I NT)

«index»

+idx_fwi(INT)

+idx_fwi_nn(INT)

dm SQLServer2012

«column»

*PK id: int fni : int fwi: int

*fni _nn: i nt

*fwi_nn: int

«PK»

+P K_test_cou nts(int)

«index»

+idx_fwi(int)

+idx_fwi_nn(int)

test_counts

«column»

*PK id: NUMBER(10) fni: NUMBER(10) fwi : NUMBER(10)

*fni_nn: NUMBER(10)

*fwi_nn: NUMBER(10)

«PK»

+PK_test_counts(NUMBER)

«index»

+idx_fwi(NUMBER)

+idx_fwi_nn(NUMBER)

MySQL MS SQL Server Oracle

Рисунок 2.1.a — Таблица test_counts во всех трёх СУБД

Суть исследования состоит в последовательном добавлении в таблицу по тысяче записей (от нуля до десяти миллионов с шагом в тысячу) и выполнении следующих семи запросов с COUNT после добавления каждого десятка тысяч записей:

MySQL Исследование 2.1.3.EXP.A

1— Вариант 1: COUNT(*) SELECT COUNT(*) FROM

2'test_counts'

3

1— Вариант 2: СОиот(первичный_ключ)

2SELECT COUNT('id')

3 FROM 'test_counts'

1— Вариант 3: COUNT(1)

2SELECT COUNT(1)

3 FROM 'test_counts'

1-- Вариант 4: СОиот(поле_без_индекса)

2SELECT COUNT('fni')

3 FROM 'test_counts'

1-- Вариант 5: СОиот(поле_с_индексом)

2SELECT COUNT('fwi')

3 FROM 'test_counts'

-- Вариант 6: COUNT(DISTINCT

1поле_без_индекса)

2SELECT COUNT(DISTINCT 'fni')

3 FROM 'test_counts'

1-- Вариант 7: COUNT(DISTINCT поле_с_индексом)

2SELECT COUNT(DISTINCT 'fwi')

3 FROM 'test counts'

MS SQL | Исследование 2.1.3.EXP.A |

1— Вариант 1: COUNT(*)

2SELECT COUNT(*)

3 FROM [test_counts]

1-- Вариант 2: СОиот(первичный_ключ)

2SELECT COUNT([id])

3 FROM [test_counts]

1— Вариант 3: COUNT(1)

2SELECT COUNT(1)

3 FROM [test_counts]

1-- Вариант 4: СОиот(поле без индекса)

2SELECT COUNT([fni])

3FROM [test counts]

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 26/545

Пример 3: использование функции COUNT и оценка её производительности

 

MS SQL

Исследование 2.1.3.EXP.A (продолжение) |

1

- Вариант 5: COUNT(поле с индексом)

2

SELECT COUNT([fwi]1

3

FROM

[test_counts]

1

-

Вариант 6: COUNT(DISTINCT поле без индекса)

-

 

 

 

2

SELECT COUNT(DISTINCT [fni]

3

FROM

[test_counts]

1

-

Вариант 7: COUNT(DISTINCT поле с индексом)

-

 

 

 

 

2

SELECT COUNT(DISTINCT [fwi]

3

FROM

[test counts]

 

 

 

 

Oracle

Исследование 2.1.3.EXP.A |

1- Вариант 1: COUNT(*)

2SELECT COUNT(*)

3

FROM

"test_counts"

1

-

Вариант 2: COUNT(первичный_ключ)

-

 

 

 

 

2

SELECT COUNT("id")

3

FROM

"test_counts"

1

-

Вариант 3: COUNT(1)

-

 

 

 

 

2

SELECT COUNT(1)

3

FROM

"test_counts"

1

-

Вариант 4: COUNT(поле без индекса)

-

 

 

 

 

2

SELECT COUNT("fni")

3

FROM

"test_counts"

1

-

Вариант 5: COUNT(поле с индексом)

-

 

 

 

 

2

SELECT COUNT("fwi")

3

FROM

"test_counts"

1

-

Вариант 6: COUNT(DISTINCT поле без индекса)

-

 

 

 

2

SELECT COUNT(DISTINCT "fni"

3

FROM

"test_counts"

1

-

Вариант 7: COUNT(DISTINCT поле с индексом)

-

 

 

 

 

2

SELECT COUNT(DISTINCT "fwi"

3

FROM

"test_counts"

В первую очередь рассмотрим время, затраченное каждой СУБД на вставку тысячи записей, и зависимость этого времени от количества уже имеющихся в таблице записей. Соответствующие данные представлены на рисунке 2.1. b.

Как видно из графика, даже на таком относительно небольшом объёме данных все три СУБД показали падение производительности операции вставки ближе к концу эксперимента. Сильнее всего данный эффект проявился у Oracle. MySQL показал наименьшее время выполнения операции на протяжении всего эксперимента (также результаты MySQL оказались самыми стабильными).

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 27/545

Пример 3: использование функции COUNT и оценка её производительности

Рисунок 2.1.b — Время, затраченное каждой СУБД на вставку тысячи записей

Теперь посмотрим на графики зависимости времени выполнения каждого из семи рассмотренных выше запросов 2.1.3.EXP.A от количества данных в таблице.

На рисунках 2.1.c, 2.1.d, 2.1 .e приведены графики для MySQL, MS SQL Server и

Oracle соответственно.

Рисунок 2.1.c — Время, затраченное MySQL на выполнение разных COUNT

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 28/545

Пример 3: использование функции COUNT и оценка её производительности

Рисунок 2.1.d — Время, затраченное MS SQL Server на выполнение разных

COUNT

Рисунок 2.1.e — Время, затраченное Oracle на выполнение разных COUNT

Чтобы увидеть всю картину целиком, представим в таблице значения медиан времени выполнения каждого запроса 2.1.3.EXP.A для каждой СУБД:

 

MySQL

MS SQL Server

Oracle

COUNT(*)

36.662

0.702

0.541

COUNT(id)

11.120

0.679

0.001

COUNT(1)

9.995

0.681

0.001

COUNT(fni)

6.999

1.494

0.001

COUNT(fwi)

12.333

1.475

0.001

COUNT(DISTINCT fni)

9.252

6.300

0.001

COUNT(DISTINCT fwi)

9.626

1.743

0.001

Работа с MySQL, MS SQL Server и Oracle в примерах © Богдан Марчук Стр: 29/545

Источник: https://studfile.net/preview/16420333/