接手了个新需求检查公司所有库表冗余索引,保存下代码复用。

#!/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检查冗余索引代码相关推荐

  1. mysql 强制使用索引_快速找出MySQL数据库冗余索引和未使用索引

    冗余索引和未使用索引的危害 随着上线的业务越来越多,在MySQL数据库中建的表也会越来越多,为提高查询访问速度,会创建相应的索引.但是由于技术人员的水平参差不齐,业务下线,代码逻辑变更等原因,导致线上 ...

  2. MySQL查询冗余索引和未使用过的索引

    MySQL5.7及以上版本提供直接查询冗余索引.重复索引和未使用过索引的视图,直接查询即可. 查询冗余索引.重复索引 select * from sys.schema_redundant_indexe ...

  3. oracle中冗余,各位有没有检查冗余索引的脚本

    查看数据库中有无多余的索引,即一个索引的字段为另一个索引的前几个字段.如index1的定义为test(filed1,filed2),index2的定义为test(filed1,filed2,filed ...

  4. mysql索引能重复吗_mysql重复索引与冗余索引实例分析

    本文实例讲述了mysql重复索引与冗余索引.分享给大家供大家参考,具体如下: 重复索引:表示一个列或者顺序相同的几个列上建立的多个索引. 冗余索引:两个索引所覆盖的列重叠 冗余索引在一些特殊的场景下使 ...

  5. mysql 删除重复索引_如何检查mysql的重复索引

    展开全部 在一个生产库上,没有创建索引,是不可思议的,当然你的索引创e68a84e8a2ad62616964757a686964616f31333363373765建的太多了.冗余了,更是不可思议的. ...

  6. mysql字段简索引_Mysql索引优化攻略(全)

    所谓索引就是为特定的mysql字段进行一些特定的算法排序,比如二叉树的算法和哈希算法,哈希算法是通过建立特征值,然后根据特征值来快速查找.而用的最多,并且是mysql默认的就是二叉树算法 BTREE, ...

  7. 高性能Mysql——创建高性能索引详解

    索引(在MySQL中也叫做"键(key)")是存储引擎用于快速找到记录的一种数据结构.这是索引的基本功能,除此之外,本章还将讨论索引其他一些方面有用的属性. 索引对于良好的性能非常 ...

  8. MySQL高级 —— 高性能索引

    引言 最近一直在抱着<高性能MySQL(第三版)>研究MySQL相关热点问题,诸如索引.查询优化等,这阶段的学习是前一段时间MySQL基础与官方的"阅读理解"的进一步延 ...

  9. 高性能mysql学习笔记--索引

    高性能mysql 五:索引 1,B-Tree索引 全值匹配:匹配所有列. 匹配最左前缀:只使用索引的第一列. 匹配列前缀:只使用索引的第一列. 匹配范围值:只使用索引的第一列. 精确匹配某一列并范围匹 ...

最新文章

  1. Kickstart的配置文件anaconda-ks.cfg解析
  2. Oracle优化06-Hint
  3. 网络游戏server编程,第一章笔记
  4. svn本地没有提交却被还原,找回本地的文件记录的方法
  5. 【我来解惑】.Net应该学什么怎么学(二)
  6. cmd编译java代码
  7. matlab对两组数据画图,matlab两列数据画图
  8. 使用Python防止SQL注入攻击
  9. ”被裁员6次的运营总监分享”总被裁员的运营人到底是为什么?
  10. Proteus总线连接心得
  11. mysql数据库题库和答案2016_哪位大侠可以提供一些mysql数据库的题库,一定要带答案的!将感激不尽!!...
  12. Excel 复制粘贴筛选出来的数据行
  13. 房屋租赁合同中“天价违约金”的约定是否有效?
  14. C语言手写爱心-还原最新热剧撩妹代码
  15. html钢琴块游戏源码,好玩的钢琴块游戏
  16. 一个月薪10000的北京程序员的真实生活
  17. 云计算可能产生的十大负面影响
  18. IT人员转行写小白文可以么?
  19. 安徽大学计算机数据库基础知识,ahu: 安徽大学计算机专业【初试真题】 - 计算机专业基础(数据结构,操作系统)【复试真题】 - 计算机专业综合(计算机组成原理,数据库原理)...
  20. Apache NIFI InvokeHTTP

热门文章

  1. 当AD服务器置于防火墙内时,所需开放的端口
  2. 步步为营 .NET 设计模式学习笔记 十四、Decorator(装饰模式)
  3. 道器相融,由Angel论一个优秀机器学习平台的自我修养
  4. Django models数据库配置以及多数据库调用设置
  5. 启动LINUX系统后,进入图形化界面的命令
  6. CocoaPods 原理分享及遇到的问题改进
  7. 团队项目第一阶段冲刺站立会议1(4月18日)
  8. 由于授权协议中的一个错误,远程计算机中断了会话
  9. Jquery UI dialog 详解 (中文)
  10. 手写简单的双向数据绑定