Разделы
Публикации
Популярные
Новые
Главная » Оптимизация производительности transact

1 ... 50 51 52 53 54 55

WHERE CREPLAC£(REPLACE(REPLACE(d,ICENumbe;-j.-.).( ) ). ) -REPLACE(REPLACE(REPLACE(a. ICENumberl .-. ).{.).). ))

AND (REPLACE(REPLACE(REPLACE(d,ICENumber2.-.),(. ).),)

-REPLACE(REPLACE(REPLACE(a,ICENumber2,-.),(.),),))

EmpId ICENumberl ICENumber2

2 (201)555-1313 (201)555-1314

7 (201)555-1313 (201)555-1314

3 (301)555-1414 (301)555-1415

8 (301)555-1414 (301)555-1415

4 (401)555-1515 (401)555-1516

9 (401)555-1515 (401)555-1516

5 (501)555-1616 (501)555-1617

10 (501)555-1616 (501)555-1617

Конечно, этот пример можно расширить, чтобы учитывать любое число разделителей, включая пробелы, запятые и так далее. Это один из случаев, в которых полезна поддержка хранимых функций, что позволит скрыть все детали реализации удаления символов в функции, которую люжно вызывать при необходимости.

Удаление дублей

Когда дубли найдены, их yдaюниe hjhi перемещение в другую таблицу становится простой задачей. Нельзя просто заменить SELECT на DELETE, так как это приведет к удалению оригинальной записи и дубля. Это просто, ио может привести к вашему увольнению. Вместо этого можно создать курсор на основе приведенного ранее запроса и перебирать таблицу. Можно сохранять каждую пару номеров и пото.м перебрать все дубликаты, удаляя нх.

Это будет работать, но есть способ лучше. При.мените свойство SQL Server отбрасывать дублирующиеся ic/иочи при построении индекса для очистки дан-пых. Вот пример:

CREATE ГАВЕЕ #datascrub

(EmpID int identity,

ICENumberl varchar(14).

ICENumber2 varc!iar(14))

CREATE UNIQUE INDEX #datascrub ON #datascrub (ICENumberl. !CENumber2) WITH IGNORE DUP KEY

INSERT #datascrub (ICENumberl. ICENumber2j VALUES С (101)555-1212 .4101)555-1213)

INSERT Idatascrub (ICENumberl, ICENumber2) VALUES ((201)555-1313,(201)555-1314)

INSERT Iddtascrub (ICENumberl, ICENumber2) VALUES ((301)555-1414,(301)555-1417)

INSERT fdatascrub (ICENumberl, ICENumber2) VALUES ((401)555-1515,(401)555-1516)

INSERT #datascrub (ICENumberl, ICENumber2) VALUES ( (501)555-1616,(501)555-1618)

INSERT fdatascrub (ICENumberl, ICENumber2) VALUES ((101)555-1211,(101)555-1213)



INSERT Idatascrub (ICENumberl. ICENumber2) VALUES (ЧгОПббб-ШЗ. (201)555-1314)

INSERT #datascrub (ICENumberl. ICENumber2) VALUES ((301 )555-W14.(301)555-1415)

INSERT #datascrub (ICENumberl, ICENumber2) VALUES ((401)555-1515,(401)555-1516)

INSERT #datascrub (ICENumberl, ICENumber2) VALUES ((501)555-1б1б',(501)555-1617)

SELECT FROM fdatascrub

Server: Msg 3604, Level 16, State 1, Line 0 Duplicate key was ignored. Server: Msg 3604. Level 16, State 1, Line 34 Duplicate key was ignored.

Empid

ICENumberl

ICENumber2

(101)555-1212

(101)555-1213

(201)555-1313

(201)555-1314

(301)555-1414

(301)555-1417

(401)555-1515

(401)555-1516

(501)555-1616

(501)555-1618

(101)555-1211

(101)555-1213

(301)555-1414

(301)555-1415

(501)555-1616

(501)555-1617

Здесь главное - опция IGNORE DUP KEYS команды CREATE INDEX. Обратите внимание, что нельзя создать уникальный индекс на таблице, уже содержащей дубликаты, даже указав опцию IGNORE DUP KEYS. Именно поэтому приведенный код сначала создает индекс, потом вставляет данные. Как видим, попытка вставить дублирующиеся данные (в даигюм случае 1слюч определен как пара столбцов) вызывает предупреждение, но не прерывает выполнение пакета запросов.

Обратите внимание, что этот способ работает только с простыми дубликатами, не содержащими разделителей и не требующими удаления лишних символов (то есть по больше!! части с не символьными типами). Если ваши потребности так же сложны, как и в способе с применением функции REPLACE(), применение CREATE INDEX...WITH IGNORE DUP KEYS не поможет, так как SQL Server не сможет различить дубли.

Таблицы итераций

Часто требуется перемещаться через набор значений и выполнять определенные вь1числения. Обычно в Transact-SQL это делается при помощи конструкции WHILE или, если вы любитель наказания со стороны коллег, при помощи недозволенного GOTO. Но существует лучший путь, если вы готовы пожертвовать небольшим количеством дискового пространства для статичной таблицы итера-



Заключение 541

ций. Таблица итерации - это простая таблица, содержащая последовательность чисел, используемых для итеративных типов вычислеиий, а ие для циклов. Такая таблица постоянно хранится в одной из ваших баз данных (размещение ее в базе model приведет к копированию таблзиы в базу tempdb при каждом запуске сервера) и может быть отфильтрована, как любая другая таблтща, при помощи оператора WHERE. Посмотрите иа следующи!! пример, чтобы понять, как это работает.

Допустим, необходи.мо отобразить таблицу квадратов всех чисел от единицы до ста. Если эта таблица уже сушествует: CREATE TABLE iterate (I int identity(-lOO.l))

DECLARE gloop int SET @loop=-100

WHILE ((aioop<101) BEGIN

INSERT iterate DEEAULT VALUES SET @loop=@loop+l

SELECT * FROM iterate

-100

( .)

(...)

написание запроса простое:

SELECT SQUARE=SQUARE(I) FROMiterate WHERE I BETWEEN 1 AND 100

Oh быстрый и куда более эффективный, нежели цикл WHILE. Обратите внимание на применение отрицательного начального значения столбца-идентификатора таблицы. Это позволяет выполнять вычисления и для отрицательных чисел. Хорошим дополнением SQL Server могла бы стать автоматическая таблица определенного вида (наподобие таблицы dual в Oracle), которую можно было бы указать в запросе, подобно столбцу-идентификатору с начальны.м значением и приростом. Это уменьшило бы потребность в постоянной таблице итераций.

Заключение

в этой главе приведена классификация скрытых и редких элементов Transact-SQL. Функции, команды и способы, нредставлеригые здесь, важны, но не могли быть размещены в других частях книги. Зная их, вы избавитесь от лишней работы в приложениях.



Приложение Предлагаемые ресурсы

Ниже приведен cihicok ресурсов, которые могут быть полезны для улучшения ваших знаний по SQL Server, Transact-SQL и SQL вообще. Этот список разделён на две группы: Книги и Интернет-ресурсы .

Книги

я в большом долгу перед авторами множества прекрасных книг по SQL. Вот некоторые, которые я нахожу особенно полезиььми:

Bjeletich, Sharon, Greg Mable, et al 1999. Microsoft SQL Seiver 7.0 Unleashed. Sams PublLshing. ISBN: 0-672-31227-1.

Celko, Joe. 1999. Joe Celkos Data & Databases: Concepts in Practice. Morgan Kaufmann Publishers. ISBN: 1-55860-432-4.

Celko, Joe. 1997. Joe Celkos SQL Puzzles & Answers. Morgan Kaufmann Publishers. ISBN: 1-55860-453-7.

Celko, Joe. 1995./oe Celkos SQL for Smarties. Morgan Kaufmann Publishers. ISBN: 1-55860-323-9.

Date, C. J. 1994. An Lntroduction to Database Systems. Addison-Wcslev. ISBN: 0-201-38590-2.

Date, C.J. with Hugh Darwen. 1993. A Guide to the SQL Standard. Addison-Wesley. ISBN: 0-201-96426-0.

Groff, James R. and Paul N. Weinberg. 1999. SQL (The Complete Reference). Osborne. ISBN: 0-07211845-8.

Kline, Kevin, Lee Gould, and Andrew Zanevsky. 1999. Transact-SQL Programming. OReilly & Associates. ISBN: 1-56592-401-0.

Melton, Jim and Alan R. Simon. 1993. Understanding the new SQL: A Complete Guide. Morgan Kaufmann Publishers. ISBN: 1-55860245-3.

Rozenshtein, David, Anatoly Abramovich, and Eugene Birger. 1995. Optimizing Transact-SQL: Advanced Programming Techniques. SQL Forum Press. ISBN: 0-9649812-0-3.



Интернет-ресурсы

Solomon, David and Ray Rankins, el, al. 1996. Microsoft SQL Seiver 6.5 Unleashed. Sams Publishing. ISBN: 6-672-30956-4.

Soukup, Ron. 1997. Inside Microsoft SQL Seiver 6.5. Microsoft Press. ISBN: 1-57231-331-5.

Soukup, Ron and Kalen Delaney. 1999. Inside Microsoft SQL Server 7.0. Microsoft Press. ISBN: 0-7356-0517-3.

Интернет-ресурсы

За последние два года появилось множество сайтов, иосвященны.х SQL Server. В следующей таблице приведены некоторые из них:

сотр.databases.ms-sqlserver

forumsb.compuserve.com/gvforums/ defauLt.asp?srv=sqLserver

microsoft, public.sqLserver. programming

www.acm.org

www.microsoft.com/sql

www.ntfaq.com/sql.html www.sqlwire.com

www.swynk.com

www.sql.ru

Общецелевая группа новостей, посвященная Microsoft SQL Server

Посвященный SQL Server форум CompuServe (доступен также через команду GO MSSQL в программном обеспечении CompuServe)

Поддерживающая Microsoft группа новостей, посвященная задачам программирования под SQL Server, особенно касающимся Transact-SQL

Основной общедоступный сайт Ассоциации вычислительной техники (Association for Computing Machinery) - первого в мире образовательного и научного компьютерного объединения

Раздел главного сайта Microsoft, посвященный SQL Server. Здесь можно загрузить множество полезных файлов, включая демонстрационную копию самого SQL Server

FAQ (Часто задаваемые вопросы) по SOL Server

Сайт, посвященный отслеживанию новостей, касающихся SQL Server

Независимый от Microsoft сайт, содержащий полезную информацию по некоторым продуктам Microsoft, включая SQL Server

Материалы по технологиям клиент-сервер (Microsoft SQL Server, InterBase, Oracle, MySQL). Переводчики книги, которую вы держите в руках, являются активистами форума sql.ru



Алфавитный указатель

DBCC CALLFULLTEXTO, 508 оптимизации

INSERT, 364 транзакция

ROLLBACK TRAN, 305 хранимая процедура

ALTER PROCEDURE, команда, 327 #, 75, 114, 116 ##, 75, 114, 116 %, оператор, 262 &, оператор, 89 ...PROPERTYO, функция, 444 ®@CURSOR ROWS,

переменная, 289 @@ERROR, 308

@@ERROR, переменная, 125, 140 @@LOCK TIMEOUT, 362 ®@MAX PRECISION, 349 @@MICROSOFTVERSI0N,

переменная, 519 ®@NESTLEVEL, 343 @@NESTLEVEL, переменная, 351 ©©OPTIONS, 343 @@PROCID, 343

@@ROWCOUNT, переменная, 141 ®@SPID, 343 ®@TRANCOUNT, 343 ®@TRANCOUNT, переменная,

313, 320 ®@VERSION, переменная, 31 ®buffersonly, 427 ®ERROR, переменная, 345 ©execsql, переменная, 73 ®spid, 432 +, оператор, 58

<>, оператор, 163 =, оператор, 163 3GL, 55, 195

ABS(), функция, 197

ALL, предикат, 163

ALTER PROCEDURE, команда, 327

ALTER TABLE, оператор, 75

ALTER TABLE...DISABLE

TRIGGER, 351 ALTER TABLE...ENABLE TRIGGER,

команда, 351 ANSI /ISO, 286 ANSI null default, 526 ANSI/ISO SQL, стандарт, 23 ANSI DEFAULTS, 305 ANSI WARNINGS, 80 ANY, предикат, 163 ASC, 444

ASC, ключевое слово, 183 AVG(), функция, 218

В

BATCHSIZE., 366 BEGIN DISTRIBUTED

TRANSACTION, команда, 306 BEGIN TRAN, команда, 313 BETWEEN, оператор, 35 BETWEEN, предикат, 152 BLOB, binary large object, 81-82

UPDATETEXT, 86

WITH LOG, 88

WRITETEXT, 87

модификация данных, 85

обращение, 83 BLOB-индекс, 112



BLOB-ТИПЫ данных, 112 Bookmark lookup, 382, 407 Bulk Copy Program, 128 BULK INSERT, 360, 473, 493 BULK INSERT

CHECK CONSTRAINTS., 129 BULK INSERT, команда, 128, 132,

307, 364 identity-столбиы, 129

С, язык, 70, 334, 535 С++, 33

С++, язык, 334, 535 CASCADE, 109 CASE, 196

CASE, оператор, 58, 282 CASE, функция, 33, 57, 161, 220, 228 CASE-выражение, 131 CAST(), функция, 32, 143 CHAR(), функция, 272, 426 CHARINDEXO, функция, 61 check-ограничения, 132 COALESCEO, функция, 100 COBOL, 41

COLUMNPROPERTYO,

функция, 483, 528 COLUMNS UPDATED(),

функция, 351 COMMIT, команда, 44, 314 COMPUTE, 52 CONTAINSO, предикат, 486 CONTAINS(), функция, 482 CONTAINSTABLEO, функция, 489 CONVERTO, функция, 32 COUNTO, функция, 171 COUNT(*), функция, 102 CREATE DEFAULT, команда, 114 CREATE INDEX, команда, 113,

454, 540 CREATE PROC, команда, 325 CREATE PROCEDURE, команда,

323, 325, 327 CREATE RULE, команда, 114 CREATE STATISTICS, команда, 450 CREATE TABLE, команда, 108 CREATE TABLE, оператор, 248 CREATE TRIGGER, команда, 350 CREATE VIEW, команда, 114,

117, 185

CREATE, команда, 114 CROSS JOIN, 39 CUBE, оператор, 176 CURRENT TIMESTAMP, функция, 527

CURSOR STATUS(), функция, 298

Data Definition Language, язык, 107 Data Manipulation Language, язык, 119 DATABASEPROPERTYO,

функция, 461, 529 DATALENGTHO, функция, 240, 533 DATEADDO, функция, 224 DATEDIFFO, функция, 49 datetime, 46 dBASE, 30

DBCC ADDEXTENDEDPROCO, 506 DBCC ADDINSTANCEO, 507 DBCC BCPTABLOCKO, 507 DBCC BUFFERO, 507 DBCC DBRECOVERO, 510 DBCC DBREINDEXO, 361 DBCC DBREINDEX(), команда, 454 DBCC DBTABLE(dbid), 510 DBCC DES(), 511 DBCC DROPCLEANBUFFERS, 364,511

DBCC DROPEXTENDEDPROCO, 511

DBCC EXTENTINFOO, 512 DBCC FLUSHPROCINDBO, 512 DBCC FREEPROCCACHE, 368, 512 DBCC FREEPROCCACHEO,

команда, 326 DBCC FREEPROCCACHE,

команда, 364 DBCC HELP(), 506 DBCC IND(), 512

DBCC LOCKOBJECTSCHEMAO, 512

DBCC LOGO, 513

DBCC LOG, команда, 319

DBCC OPENTRANO, команда, 319

DBCC PAGE 0, 513

DBCC PERFMON, команда, 415

DBCC PROCCACHE, 368

DBCC PSS(), 427

DBCC PSS(), команда, 427

DBCC RESOURCE, 515

DBCC SETINSTANCEO, 516



DBCC SHOWCONTIG, 361 DBCC SQLPERF, команда, 415 DBCC TAB(), 516 DBCC TRACEON(), команда, 519 DBCC TRACEO\(3604), 506 DBCC UPDATEUSAGEO,

команда, 453 DBCC UPGRADEDBO, 516 DEALLOCATE, команда, 299 Decision Support System, 307 DECLARE CURSOR, команда, 286 DEFAULT VALUES, 122 DEFAULT, ключевое слово, 120, 340 default-ограничения, 110 DELETE, команда, 29, 137

курсоры,138 DELETE, оператор, 187, 244 DELETE-триггеры, 140 Delphi, язык. 334 DESC, 444

DESC, ключевое слово, 42, 183 DIFFERENCEO, функция, 68 Distributed Management Objects, 128, 494

Distributed Transaction Coordinator

(DTC), 306 DLL, 69

DML-запрос, 108 DML-команда, 82, 119, 305 DML-оператор, 82, 131, 351 ошибки выполнения, 140 DML-операция, 350 ВКЬограничешш, 358 DROP INDEX, ко.\шнда, 454 DROP TABLE, команда, 112 DROP, команда, 112 DR0P EXISTING, 113 DSS, 175

Dynamic Link Libraries, 69 E

EIS, 175

ENCRYPTO, функция, 517 Enterprise Manager, 118, 362, 418

планирование задач, 472

создание сцепариео, 474 Excel, 493

EXECO, функция, 72, 368, 435 EXEC()., 535 EXEC, команда, 325

EXEC, оператор, 453 . EXISTS, предикат, 156, 162, 486

FAST F0RWARD, 367 FETCH, 93

FILLFACTOR, 113-114, 361, 396 firehose-курсор, 273 FIRSTROW/LASTROW, 365 FORMATMESSAGEO,

функция, 534 FORMSOFO, oueparop, 489 FORWARD ONLY, 367 FREETEXTO, предикат, 486, 489 FREETEXTTABLEO, функция, 482,

489, 491 FULL OUTER JOIN, 39-40 FULLTEXTCATALOGPROPERTYO,

функция, 483

GET SID(), функция, 517 GETANSINULLO, функция, 526 GETDATEO, функция, 49, 191 GO, 327

GROUP BY. 173 GROUP BY ALL, 174 GROUPINGO, функция, 54 GUID, 90

HAVING, 228 HAVING, оператор, 180 HAVING, предложение, 41 HOLDLOCK, 85,312 HOST NAMEO, функция, 527

IDENT SEED(), функция, 529 IDENTITYO, функция, 213, 529 IDENTITYCOL, функция, 529 identity-столбец, 12), 201, 243, 280 IF, оператор, 103 IGNORE DUP KEY, 126 IGNORE DUP KEYS, 540 IN, предикат, 159, 161

оптимизация, 161

преобразование к EXIST, 158 Index Tuning Wizard, 362, 411 INDEX COL(), функция, 530



INDEXPROPERTYO, функция, 531 INFORMATION SCHEMA, 89, 436 INFORMATION SCHEMA.SCHEMA

ТА, 452 INSERT, команда, 336 ошибки, 124 удаление дублирующих записей, 126 INSERT, оператор, 28, 119, 187, 237 INSERT-DEFAULT VALUES, 122, 527

INSERT...EXEC, 123, 485

оператор, 463, 472 INSERT...EXEC(), 513 INSERT...SELECT, 122 INSERT-триггер, 132 INTO, ключевое слово, 29 ISABOUTO, функция, 490 ISAM, 274 ISAM-база, 274 ISDATEO, функция, 533 ISNULLO, функция, 100 ISNUMERICO, функция, 533 ISQL, 417

ISQL /W, утилита, 24

KEEPIDENTITY, к/почевое

слово, 129 KEYSET-курсор, 300, 367

LCT ADMI(), функция, 142 LEFT OUTER JOIN, 39-40 LIKE, 481

LIKE, предикат, 154, 486 M

MEDIANO, функция, 206 Microsoft Index Server, 481 Microsoft Search, 481 money, 80

nested triggers, 351

NET START mssearch, 485

NEWIDO, функция, 90, 530

NO ACTION, 109

nooutput, 463

NULL, 98

NULL, ключевое слово, 27 NULL-значения, 98, 157

OBJECTJDO, 517 OBJECT NAME(), функция, 435 OBJECTPROPERTYO, 486 OBJECTPROPERTYO, функция, 334,

339, 483, 497 ODBC, 25, 102 ODSOLE, 474, 493 OLAP, 175,217 OLEDB, 102 OLE-автоматизация, 493 OLTP-приложение, 386 ON, 40

on success action, 471 Open Data Services API, 334 Oracle, 31, 219 ORDER BY, 144, 162, 182 ORDER BY, предложение, 42 OSQL, утилита, 25, 466 OUPUT, ключевое слово, 341

PADJNDEX, 113 PARSENAMEO, функция, 535 PATINDEXO, 481 PATINDEXO, функция, 71, 84 PERCENT, ключевое слово, 144 Perfmon, 414

Performance Monitor, 320, 414, 507 PRINT, оператор, 309, 320, 426 printf(), функция, 347 PRINTFO, функция, 345 Profiler, 413

PWDCOMPAREO, функция, 518 PWDENCRYPTO, функция, 518

Query Analyzer, 411

интерфейс, 24 Query Analyzer, утилита, 24 QUOTENAME(), функция, 535

READ ONLY, ключевое слово, 367 READTEXT, 84 READTEXT, команда, 83 recursive triggers, 351



RETURN, команда, 342 RIGHT OUTER JOIN, 39-40 ROLLBACK TRIGGER, команда, 351 ROLLBACK, команда, 44, 314 ROLLUP, оператор, 177 Row Operations Manager, 131 ROWGUIDCOL, ключевое слово, 530 rowset functions, 489

SARG, 371

SAVE TRAN, команда, 316 SELECT *, конструкция, 31 select into/buik copy, 471 SELECT TOP n, запрос, 148 SELECT TOP n, оператор, 209 SELECT, команда, 30 SELECT, оператор, 30, 32, 40, 122,

138, 143, 147, 164, 172, 191, 232,

240-241, 253, 320 SELECT..INTO, 321, 364 SELECT...INTO, команда, 213 SET ANSI NULLS, команда, 158 SET ANSI NULLS, 102-103, 186 SET aNSI PADDING, 60 SET ANSI WARNINGS, команда, 102 SET

concat null yields null,

SET CURSOR

close on commit,

команда, 340 SET

cursor close on commit,

команда, 295 set default, 109

setidentityjnsert, 121, 244 set implicit transactions,

команда, 305, 308, 340 SET L0CK TIME0UT 362 SET NOCOUNT, 368 SET NOCOUNT ON, 332, 368 SET NULL, 109

SET QUOTEDJDENTIFIER, 186 SET ROWCOUNT, команда, 144, 211 SET TEXTSIZE, команда, 340 SET TRANSACTION ISOLATION

LEVEL, 85 SET TRANSACTION ISOLATION

LEVEL, команда, 303, 309

Show Execution Plan, 408 SIGNO, функция, 197, 202, 225 smalldatetime, 46 smalimoney , 80 SOUNDEXO, функция, 61-62 soundex-код, 66, 68 sp active jirocesses, процедура, 422 sp add jobserver, процедура, 471 sp attach db, 511 sp attach db, процедура, 466 sp autostats, процедура, 533 sp copyfi!e, 461 sp create removable,

процедура, 463 sp cycle errorlog, процедура, 511 sp dbbackup, процедура, 457 sp dbcmpt!evei, процедура, 27 sp dboption, 509 sp dboption, процедура, 3l9, 512 sp decodepagebin, процедура, 396 sp depends, 117 sp detach db, процедура, 511 sp dir, прцедура, 438 sp displayoacrrorinfo,

ыпроцедура, 498 sp dropextendedprocedure,

процедура, 511 sp enable fulltext, процедура, 486 sp execHtesc}!, 367 sp executesql, процедура, 72 sp exporttable, процедура, 494 sp find root blocker, процедура, 431 sp fulltext catalog, 486 sp ful!text column, процедура, 486 sp fulltext tablc, 486 sp generate script, процедура, 472, 480 sp getSQLregistry, процедура, 461,

471, 502 spjielp, 25

sp helptext, процедура, 323 sp hexadeciraal, процедура, 498 sp hcxstring, процедура, 336 sp importtabIe, процедура, 498 spjndexoptions, процедура, 359 spjock, процедура, 432 sp make portable, процедура, 463 sp MS marksystemobject, процедура,

334, 508 sp OACreate, 493 sp object, процедура, 444



1 ... 50 51 52 53 54 55
© 2004-2024 AVTK.RU. Поддержка сайта: +7 495 7950139 в тональном режиме 271761
Копирование материалов разрешено при условии активной ссылки.
Яндекс.Метрика