MySQL检查冗余索引代码
接手了个新需求检查公司所有库表冗余索引,保存下代码复用。
#!/usr/bin/python2.7
# -*- coding: utf-8 -*-
#liding@xywy.com
import MySQLdb
import sys
import os
import time,datetime
import logging
import mysqlcommon
path = sys.path[0]
fpath = os.path.dirname(path) + "/"
sys.path.append(fpath)
from instance import base
from lib import mysqllib
from lib import maillib
from lib import configgetter
getter = configgetter.Configuration("conf/global.cnf")
luser = getter.get("mysqlha", "user")
lpasswd = getter.get("mysqlha", "passwd")
email_addr = 'dba@xywy.com'
def MySQL_conn(host,port,db,sql):
db = MySQLdb.connect(host=host, port=port, user=luser, passwd=lpasswd, db=db)
cursor = db.cursor()
cursor.execute(sql)
result = cursor.fetchall()
return result
def get_MySQL(host,port,db,tname):
#最长的索引数,也就是循环的次数
sql = "select max(SEQ_IN_INDEX) from information_schema.STATISTICS where table_schema='%s' \
and table_name='%s';" % (db,tname)
num = MySQL_conn(host,port,db,sql)
num = num[0][0]
index_na_all=[]
status = []
if num != None:
for numb in range(num):
a = numb+1
b = numb +2
#查询第一个位置重复的字段名
if a == 1:
sql1 = "select COLUMN_NAME from information_schema.STATISTICS where table_schema='%s' and table_name='%s' \
and SEQ_IN_INDEX = %s and INDEX_NAME != 'PRIMARY' group by COLUMN_NAME having count(*) >1;" % (db,tname,a)
else:
sql1 = "select COLUMN_NAME from information_schema.STATISTICS where table_schema='%s' and table_name='%s' \
and SEQ_IN_INDEX = %s and INDEX_NAME in (%s) group by COLUMN_NAME having count(*) >1;" % (db,tname,a,idx_tw1)
data = MySQL_conn(host,port,db,sql1)
if data == ():
break
alist = []
for data1 in data:
alist.append(data1[0])
colu = '\',\''.join(alist)
colu = "\'" + colu + "\'"
#查询第一个位置相同的索引名
if a == 1:
sql2 = "select INDEX_NAME from information_schema.STATISTICS where table_schema='%s' and table_name='%s' \
and SEQ_IN_INDEX = %s and COLUMN_NAME in (%s);" % (db,tname,a,colu)
else:
sql2 = "select INDEX_NAME from information_schema.STATISTICS where table_schema='%s' and table_name='%s' \
and SEQ_IN_INDEX = %s and COLUMN_NAME in (%s) and INDEX_NAME IN (%s) ;" % (db,tname,a,colu,idx_tw1)
in_name = []
index_name = MySQL_conn(host,port,db,sql2)
index_na = [i[0] for i in index_name]
if index_na == []:
continue
for iname in index_na:
in_name.append(iname)
inname = '\',\''.join(in_name)
inname = "\'" + inname + "\'"
#第一个位置相同而且有第二个位置的索引名
sql4 = "select INDEX_NAME from information_schema.STATISTICS where table_schema='%s' and table_name='%s' \
and INDEX_NAME in (%s) and SEQ_IN_INDEX=%s;" % (db,tname,inname,b)
idx_two = MySQL_conn(host,port,db,sql4)
idx_tw = [i[0] for i in idx_two]
idx_tw1 = '\',\''.join(idx_tw)
idx_tw1 = "\'" + idx_tw1 + "\'"
for idna in idx_tw:
if idna in index_na:
index_na.remove(idna)
if index_na != []:
index_na_all.append(index_na)
if index_na_all != []:
produc = base.getProductByPort(port)
prod = produc['result'].values()
if prod:
produc = prod[0]
else:
produc = ''
if index_na_all[0] != []:
status.append([port,produc,db,tname,index_na_all[0]])
return status[0]
else :
return 123
else :
return 123
def call_MySQL():
db = 'backup'
host = '10.20.6.5'
port = 3440
sql = "select host,port from policy ;"
allph = MySQL_conn(host,port,db,sql)
showdb = 'mysql'
showsql = "show databases;"
system_lib = (('information_schema',), ('mondmm',), ('mysql',), ('performance_schema',))
statu = []
for i in allph:
port = i[1]
host = i[0]
dbname = MySQL_conn(host,port,showdb,showsql)
rdbname = set(dbname) - set(system_lib)
for rname in rdbname:
namesql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = '%s';" % rname
rtable_name = MySQL_conn(host,port,rname[0],namesql)
for table_name in rtable_name:
result = get_MySQL(host,int(port),rname[0],table_name[0])
if result != 123:
statu.append(result)
SendMail(statu)
def SendMail(statu):
title = 'report(数据库冗余索引报表_%s)' % (datetime.datetime.now().strftime('%Y-%m-%d'))
col_name = ['端口','产品线','库名','表名','索引名']
maillib.sendHtml(email_addr,title,statu,col_name)
call_MySQL()
转载于:https://blog.51cto.com/774148515/1858066
MySQL检查冗余索引代码相关推荐
- mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引
冗余索引和未使用索引的危害 随着上线的业务越来越多,在MySQL数据库中建的表也会越来越多,为提高查询访问速度,会创建相应的索引.但是由于技术人员的水平参差不齐,业务下线,代码逻辑变更等原因,导致线上 ...
- MySQL查询冗余索引和未使用过的索引
MySQL5.7及以上版本提供直接查询冗余索引.重复索引和未使用过索引的视图,直接查询即可. 查询冗余索引.重复索引 select * from sys.schema_redundant_indexe ...
- oracle中冗余,各位有没有检查冗余索引的脚本
查看数据库中有无多余的索引,即一个索引的字段为另一个索引的前几个字段.如index1的定义为test(filed1,filed2),index2的定义为test(filed1,filed2,filed ...
- mysql索引能重复吗_mysql重复索引与冗余索引实例分析
本文实例讲述了mysql重复索引与冗余索引.分享给大家供大家参考,具体如下: 重复索引:表示一个列或者顺序相同的几个列上建立的多个索引. 冗余索引:两个索引所覆盖的列重叠 冗余索引在一些特殊的场景下使 ...
- mysql 删除重复索引_如何检查mysql的重复索引
展开全部 在一个生产库上,没有创建索引,是不可思议的,当然你的索引创e68a84e8a2ad62616964757a686964616f31333363373765建的太多了.冗余了,更是不可思议的. ...
- mysql字段简索引_Mysql索引优化攻略(全)
所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...
- 高性能Mysql——创建高性能索引详解
索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构.这是索引的基本功能,除此之外,本章还将讨论索引其他一些方面有用的属性. 索引对于良好的性能非常 ...
- MySQL高级 —— 高性能索引
引言 最近一直在抱着<高性能MySQL(第三版)>研究MySQL相关热点问题,诸如索引.查询优化等,这阶段的学习是前一段时间MySQL基础与官方的"阅读理解"的进一步延 ...
- 高性能mysql学习笔记--索引
高性能mysql 五:索引 1,B-Tree索引 全值匹配:匹配所有列. 匹配最左前缀:只使用索引的第一列. 匹配列前缀:只使用索引的第一列. 匹配范围值:只使用索引的第一列. 精确匹配某一列并范围匹 ...
最新文章
- Kickstart的配置文件anaconda-ks.cfg解析
- Oracle优化06-Hint
- 网络游戏server编程,第一章笔记
- svn本地没有提交却被还原,找回本地的文件记录的方法
- 【我来解惑】.Net应该学什么怎么学(二)
- cmd编译java代码
- matlab对两组数据画图,matlab两列数据画图
- 使用Python防止SQL注入攻击
- ”被裁员6次的运营总监分享”总被裁员的运营人到底是为什么?
- Proteus总线连接心得
- mysql数据库题库和答案2016_哪位大侠可以提供一些mysql数据库的题库,一定要带答案的!将感激不尽!!...
- Excel 复制粘贴筛选出来的数据行
- 房屋租赁合同中“天价违约金”的约定是否有效?
- C语言手写爱心-还原最新热剧撩妹代码
- html钢琴块游戏源码,好玩的钢琴块游戏
- 一个月薪10000的北京程序员的真实生活
- 云计算可能产生的十大负面影响
- IT人员转行写小白文可以么?
- 安徽大学计算机数据库基础知识,ahu: 安徽大学计算机专业【初试真题】 - 计算机专业基础(数据结构,操作系统)【复试真题】 - 计算机专业综合(计算机组成原理,数据库原理)...
- Apache NIFI InvokeHTTP