Самые полезные мета-запросы SQL - PullRequest
6 голосов
/ 24 февраля 2010

У меня есть страсть к мета-запросам , под которыми я подразумеваю запросы, которые отвечают на вопросы о данных, а не на с данными .

Прежде чем я получу много обоснованной критики, я понимаю, что подход мета-запросов не идеален, как красноречиво описано, например, здесь . Тем не менее, я считаю, что у них есть свое место. (Настолько, что я создал пользовательский элемент управления WinForms, который поддерживает параметризованные мета-запросы для SQL Server, Oracle и MySql, и я подробно описал разработку и использование этого QueryPicker в опубликованной серии из трех частей на Simple-Talk.com.)

Моя мотивация для использования мета-запросов:

  1. Когда я сижу с новой базой данных и хочу ее понять, я исследую мета-запросы. Наиболее распространенными являются те, которые позволяют мне отвечать на вопросы о полях и таблицах, такие как «Какие еще таблицы имеют это поле« xyz »?» или "Какие таблицы имеют столбцы идентификаторов?" или "Каковы ключи для этой таблицы?"
  2. Я регулярно работаю с несколькими типами баз данных (SQL Server, Oracle, MySql) и - практикуя великолепный идеал программирования лени - я не хочу искать или запоминать загадочный рецепт SQL каждый раз, когда мне это нужно , Я хочу указать и нажать.

Конечно, есть другие (лучшие?) Способы получения метаинформации - для данного типа базы данных . SQL Server, в частности, предоставляет SQL Server Management Studio. Инструменты Oracle и MySql, по-видимому, не предоставляют одинаковую полезность. (Я свободно признаю, что я делаю это утверждение с моим взглядом вселенной на SQL-Server. :-) Даже если бы они это сделали, они были бы другими - я хочу единообразный подход для всех типов баз данных .


Итак, наконец, вопрос:

Какие мета-запросы SQL Server, Oracle или MySql делают , которые вы находите полезными?


Сводная матрица

Это первое представление суммирует мою коллекцию на данный момент по типу базы данных (и, как я уже сказал, в значительной степени ориентирован на SQL Server).

Query                            SQL Server    Oracle     MySql

DB Version                           yes        yes        yes
Databases with properties            yes                   yes
Databases with space usage           yes
National Language Support                       yes
Procedures and functions             yes                   yes
Primary keys                         yes                   yes
Primary to foreign keys              yes
Session Information/brief            yes
Session Information/details          yes
Session SET options                  yes
Users and Roles                      yes
Currently running statements         yes
Constraints                          yes
Indexes                              yes
Column info/brief                    yes        yes        yes
Column info/details                  yes        yes        yes
Object level details                 yes
Rows and space used                  yes
Row/column counts                    yes
Non-empty tables                     yes        yes        yes
Show table schema                    yes        yes
Seed/max values                      yes

Ссылки по типу базы данных

Я сам разработал некоторые из этих мета-запросов, но многие пришли с форумов сообщества. В этом втором представлении при необходимости указываются исходные URL-адреса.

SQL Server

System Category
-----------------
    DB Version
    Databases with properties    http://www.mssqltips.com/tip.asp?tip=1033
    Databases with space usage   http://www.sqlservercentral.com/Forums/Topic261080-5-1.aspx
    Procedures and functions
    Primary keys                 http://databases.aspfaq.com/schema-tutorials/schema-how-do-i-show-all-the-primary-keys-in-a-database.html
    Primary to foreign keys      http://www.sqlservercentral.com/scripts/Miscellaneous/61481/
    Session Information/brief    http://www.sqlservercentral.com/blogs/glennberry/archive/2009/12/28/how-to-get-a-count-of-sql-connections-by-ip-address.aspx
    Session Information/details  http://www.mssqltips.com/tip.asp?tip=1817
    Session SET options
    Users and Roles              http://www.sqlservercentral.com/scripts/users/69379/
    Currently running statements http://www.sqlservercentral.com/articles/DMV/64425/
    Constraints
    Indexes                      http://www.sqlservercentral.com/scripts/Index+Management/63932/

Column Category
-----------------
    Column info/brief
    Column info/details

Table Category
-----------------
    Object level details
    Rows and space used          http://www.mssqltips.com/tip.asp?tip=1177
    Row/column counts
    Non-empty tables

DDL Category
-----------------
    Show table schema            http://www.sqlservercentral.com/scripts/Create+DDL+sql+statements/65863/

Data Category
-----------------
    Seed/max values

Oracle

System Category
-----------------
    DB Version
    National Language Support

Column Category
-----------------
    Column info/brief
    Column info/details

Table Category
-----------------
    Non-empty tables

DDL Category
-----------------
    Show table schema

MySql

System Category
-----------------
    DB Version
    Databases
    Procedures and functions
    Primary keys                 http://databases.aspfaq.com/schema-tutorials/schema-how-do-i-show-all-the-primary-keys-in-a-database.html

Column Category
-----------------
    Column info/brief
    Column info/details

DDL Category
-----------------
    Show table schema

Ответы [ 6 ]

1 голос
/ 24 февраля 2010

Oracle SQL Developer имеет набор встроенных отчетов, которые включают эти категории. Я расширил одну из категорий.

About Your Database
All Objects
Application Express
ASH and AWR
Database Administration
  All Tables
  Cursors
  Database Parameters
  Locks
  Memory
  Sessions
  Storage
  Top SQL
  Users
  Waits and Events
Data Dictionary
Jobs
PLSQL
Security
Streams
Table
XML

Вот несколько фактических названий отчетов,

Tables without Indexes
Tables without Primary Keys
Tables with Unindexed Foreign Keys
Largest Average Row Length
Most Rows
Unusable Indexes

Доступно еще много отчетов.

1 голос
/ 24 февраля 2010

У меня есть ряд таких, которые я регулярно использую на SQL Server, включая, но не ограничиваясь:

  • Таблицы без первичных ключей
  • Таблицы без кластерного индекса
  • Таблицы без индексов
  • Скалярные пользовательские функции, которые не являются детерминированными
  • Объект базы данных, у которого нет расширенного свойства «MS_Description» (свойство «Описание» по умолчанию, которое полезно для создания документации)
  • Схемы, которые пусты
  • Модули SQL (представления, процессы, функции, триггеры) без стандартных блоков документации / комментариев

Система-конкретны:

  • Таблицы конфигурации, которые содержат ссылки на отсутствующие хранимые процедуры или представления
  • Представления, основанные на таблицах / представлениях, которые нельзя привязать к схеме или проверить (потому что они основаны на представлении / таблице в другой базе данных)
  • Столбцы в представлениях, которые не используются в системе
  • Некоторые типы столбцов NULLable, которые не имеют значений по умолчанию
  • Числовые столбцы, которые могут быть пустыми
0 голосов
/ 25 февраля 2010

msorens,

Я полностью согласен с вами. Понимание данных и схемы помогает лучше кодировать, лучше избегать ошибок, выявлять особые случаи и анализировать требования.

Вы можете проверить мой другой пост по адресу:
Сравнить две схемы и обновить старую схему новыми столбцами новой схемы

Мой скрипт сравнения схем - это куча информации о представлениях каталога Oracle. К сожалению, это не завершено, но это задача на другой день. ; -)

1012 * Матфей *

0 голосов
/ 24 февраля 2010

Проблема использования набора консервированных сценариев в Интернете заключается в том, что «это не то, что вы знаете, а то, что вы знаете, не так или больше не так». Нужно убедиться, что при поднятии скриптов подходит версия. Например, Oracle по состоянию на 10.1 или 10.2 позволяет устанавливать столбец как UNUSED. Он по-прежнему отображается в DBA_TAB_COLUMNS, но больше его там нет.

Лучше понять, что находится в Словаре данных - особенно в Oracle, в содержимом справочника по базам данных (V $, DBA_ *) и справочника по пакетам и типам PL / SQL, поскольку все больше и больше функциональных возможностей движется в этом направлении (например, пакет DBMS_STATS, заменяющий оператор ANALYZE)

Некоторые из наиболее эзотерических, но полезных в Oracle:

DICT -- имя и краткое описание каждой таблицы \ представления в словаре данных.

DBA_TAB_MODIFICATIONS -- у каких таблиц было сколько трафика вставки / обновления / удаления с момента последнего анализа.

V$OBJECT_USAGE -- при использовании с ALTER INDEX ... MONITORING USAGE показывает, какие индексы не использовались в инструкциях SQL с момента включения мониторинга. (Индексы, используемые для поддержки внешнего ключа или уникальных ограничений, могут не отображаться, но, тем не менее, могли «использоваться».)

V$SESSION_LONGOPS -- какие операторы SQL выполняют «длительные» операции, такие как полное сканирование, сортировка и слияние, и сколько времени, по мнению Oracle, пройдет до того, как завершится.

DBA_HISTOGRAMS -- Какой перекос существует в ваших данных

DBA_OBJECTS -- есть все

DBA_SOURCE (by line)/ DBA_TRIGGERS (by block)-- весь исполняемый код в системе.

0 голосов
/ 24 февраля 2010

Oracle имеет большой диапазон представлений метаданных, вероятно, я чаще всего запрашиваю DBA_OBJECTS, который можно запрашивать для всех типов объектов различных типов. Та же информация и многое другое можно получить из других представлений (например, дополнительную информацию о таблицах можно найти в DBA_TABLES).

Хороший обзор словаря данных Oracle можно найти здесь .

0 голосов
/ 24 февраля 2010

В Oracle наиболее полезным является то, что на v$session указывает на ожидание запущенных сеансов, это означает, что сеанс делает в этот момент (чтение с диска, ожидание блокировки, ...)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...